Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][mySql] pobieranie rekordów
Forum PHP.pl > Forum > Przedszkole
mtskilla
Witam

Mam takie strasznie lamerskie pytanie..
Mam dwie tablice "kategorie" oraz "podkategorie"

Jak mam wylistowac je w taki sposob zeby miec np:

kategoria 1
pod kategoria 1
pod kategoria2
pod kategoria 3
kategoria 1
pod kategoria 1
pod kategoria2
pod kategoria 3

dodam, ze w kazdej podkategorii mam wpisaną nazwę kategorii glownej.
Mogłby ktoś mnie naprowadzic?
dzieki i pozdrawiam
cezarszl
Wybacz, ale potrzebujesz całkowitych podstaw, bez tego chyba się nie obejdzie --> klik:)

nospor
Pisałem o tym tutaj:
http://nospor.pl/grupowanie-wynikow-n35.html
mtskilla
Mam takie male pytanko co do tego powyzej.
Struktura moja wyglada tak, ze mam
kategoria (category)
podkategoria (product)
cel (prod)
(mniejsza o nazewnictwo)

chcialbym aby wyswietlalo mi:

* kategoria 1
o Podkategoria 1 (liczba celów: 2)
o Podkategoria 2 (liczba celów: 5)
* kategoria 2
o Podkategoria 1 (liczba celów: 0)
* kategoria 3
o Podkategoria 1 (liczba celów: 2)
o Podkategoria 2 (liczba celów: 5)
o Podkategoria 3 (liczba celów: 0)
o Podkategoria 4 (liczba celów: 1)

wystrugany kod (zle bo nie dziala) :
  1. $sql = 'select pr.NAME PRNAME, pr.ID PRID, p.NAME PNAME,p.ID PID, c.ID CID, c.NAME CNAME from category c '.'left join product p on p.FK_CATEGORY = c.ID '.' left join prod pr on pr.FSK_CATEGORY = p.ID order by c.NAME asc, p.NAME asc, pr.NAME asc';
  2.  
  3. // pr to tablica prod i w niej FSK_category odpowiada p.ID - id produktu..
  4.  
  5. $res = mysql_query($sql);
  6.  
  7. if (!empty($res))
  8. {
  9.  
  10. $categories = array();
  11. while ($row = mysql_fetch_array($res)){
  12. $cid = $row['CID'];
  13. $pid = $row['PID'];
  14.  
  15. if (!isset($categories[$cid]))
  16. $categories[$cid] = array('name' => $row['CNAME'], 'products' => array());
  17.  
  18.  
  19. if (!empty($row['PNAME']))
  20. $categories[$cid]['products'][] = array('name' => $row['PNAME'], 'id'=>$row['PID']);
  21.  
  22.  
  23.  
  24. if (!empty($row['PRNAME']))
  25. $categories[$pid]['prod'][] = array('name' => $row['PRNAME'], 'id'=>$row['PRID']);
  26.  
  27. }
  28.  
  29.  
  30. foreach ($categories as $idCat => $category){
  31. echo '<a class="menuitem">'.$category['name'].' ('.count($category['products']).')</a> <ul class="submenu">';
  32. foreach ($category['products'] as $product){
  33. echo '<li><a href="productlist.php?name='.$category['name'].'">'.$product['name'].' ('.count($category['products']).')</a> </li>';
  34. }
  35. }


co robie zle?
wstydnis.gif


wstydnis.gif
nospor
Zastosuj się proszę do podanych tu porad:
Temat: Jak poprawnie zada pytanie
a zobaczysz być może parę dodatkowych błędów, które pomogę Tobie/nam w rozwiązaniu tego problemu.
Zrewolwerowany
  1. $cats_query=mysql_query('SELECT * FROM kategorie');
  2.  
  3. while($cat=mysql_fetch_assoc($cats_query)){
  4.  
  5. echo '* '.$cat[nazwa].'<br>';
  6.  
  7. $subcats_query=mysql_query('SELECT * FROM podkategorie WHERE kategoria="'.$cat[id].'"');
  8.  
  9. while($subcat=mysql_fetch_assoc($subcats_query)){
  10.  
  11. echo 'o '.$subcat[nazwa].'<br>';
  12.  
  13. }
  14.  
  15. }


Musisz pozmieniać jedynie nazwy pól i tabel
nospor
@Zrewolwerowany Twoje rozwiązanie jest najgorszym z możliwych. Zapytania wykonywane w pętli to nie najlepszy pomysł.
mtskilla

A dlaczego jest to zly pomysl?

Czy to bardzo obciąża baze? a może spowalnia dzialanie strony?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.