Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Kategorie i podkategorie + podgląd
Forum PHP.pl > Forum > Przedszkole
ghastblood
Witam,
Stworzyłem sobie tabele w MySQL i mam w niej cat_id, cat_name, cat_parent

Kategorie i podkategorie wyświetlam takim sposobem
  1. $result = get_query("SELECT * FROM category WHERE cat_parent = '0'");
  2. while ($data = get_array($result)) {
  3. echo '<b><a href="view.php?id='.$data[cat_id].'">'.$data['cat_name'].'</b></a>';
  4. $result1 = get_query("SELECT * FROM category WHERE cat_parent = '".$data['cat_id']."' ");
  5. while ($data1 = get_array($result1)) {
  6. echo'<li> - <a href="view.php?id='.$data1[cat_id].'">'.$data1['cat_name'] . '</li></a>' ;
  7. }
  8. }


wszystkie podkategorie i w nich artykuły wyświetlają się dobrze
ale jak zrobić żeby po kliknięciu na kategorie wyświetlić wszystkie artykuły z podkategorii ?


nospor
Trochę nie na temat, ale jak widzę takie "stwory" to aż mnie skręca.

Robisz w pętli zapytania - strasznie nieoptymalne. Takie rzeczy załatwia się jednym zapytaniem:
http://nospor.pl/grupowanie-wynikow.html

ghastblood
Dzięki.
tylko chciał bym przechowywać kategorie i subkategorie w jednej tabeli

a więc zacząłem robić taki kod:
  1. $result = mysql_query("SELECT * FROM fusion_category") or die(mysql_error());
  2.  
  3. $categories = array();
  4. while($row = mysql_fetch_assoc($result)) {
  5. $pid = $row['cat_parent'];
  6. $cid = $row['cat_id'];
  7.  
  8. if($pid == 0)
  9. $categories[$cid] = array('name' => $row['cat_name'], 'cats' => array());
  10.  
  11. if($pid == $cid)
  12. $categories[$cid]['cats'][] = array('name' => $row['cat_name'], 'id'=>$cid);
  13. }
  14.  
  15. print_r ($categories);


pierwszy warunek wyświetla mi dobrze w tablicy kategorie a subkategorii już nie

widok print_r:
  1. Array ( [1] => Array ( [name] => kategoria [cats] => Array ( ) ) )
nospor
Przecież cat_parent i cat_id nie mogą być jednocześnie takie same
Od kiedy to rodzic wskazuje na samego siebie?

Pozatym nawet jeśli dane masz w jednej tabeli to bez problemu możesz zrobić wg. schematu co podałem. Po prostu LEFT JOIN będzie wskazywal na tę samą tabelę ale z innymi warunkami
ghastblood
Cytat
Przecież cat_parent i cat_id nie mogą być jednocześnie takie same


a to dlaczego przecież cat_parent ma wskazywać id głównej kategorii
np:
id nazwa rodzic
1 kategoria 0
2 subkategoria 1

nospor
$pid = $row['cat_parent'];
$cid = $row['cat_id'];
Przeciez ty parenta i id kategorii pobierasz z tego samego rekordu. W tym samym rekordzie parent i id kategorii nie mają prawa być takie same smile.gif
ghastblood
Dzięki za podpowiedzi, już rozumiem gdzie robiłem błąd smile.gif teraz tylko jak dodać odnośnik żeby po kliknięciu na główną kategorię wyświetliły się artykuły ze wszystkich podkategorii.
RONINZGR
Szkoda tylko że skrypt jest do drugiej głębokości kategorii. Szukam rozwiązania nieograniczonego czyli że mogę tworzyć tyle "głębokości" ile mi się tylko podoba. Próbowałem dodać jakieś usprawnienia niestety jednak nic mi już nie przychodzi do głowy... Może jeszcze jakieś ciekawe rady w tym temacie?
nospor
To już podchodzi pod normalne drzewo. Musisz więc poczytać o drzewach (tree)
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.