Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Katalog www
Forum PHP.pl > Forum > Gotowe rozwiązania
camelx
Robię katalog www oparty o MySQL. Chcę zrobić w nim podział na kategorie i podkategorie (jak w większości portali).
Moja tabela "kategorie" w bazie danych ma następujące pola: id, nazwa, level.
Kiedy level=0 kategoria wyświetlana jest jako kategoria główna, a jeżeli level=1 kategoria wyświetlana jest jako podkategoria.
Pytanie:
Jak mogę przyporządkować wybrane kategorie do odpowiedniej kategorii głównej questionmark.gif

Chodzi mi o to, żeby uzyskać mniej więcej coś takiego:
> Komputery
--> Hacking
--> Linux
> Sport
--> Piłka nożna
--> Igrzyska
(..)


Mam nadzieję, że wszystko jest jasne biggrin.gif .
Pomóżcie, bo cały dzień nad tym siedzę i nic nie wychodzi...
essey
hmmmm, może tak:

np. id=1, nazwa=Komputery, level=0, catid=0

i teraz robimy podkategorie
id=2, nazwa=Hacking, level=1, catid=1


Dodałem pole catid. W chwili gdy catid = 0 i level = 0, to wiemy, że jest to kategoria glowna.
Jeżeli level = 1 i catid = 1, to wiemy, że jest to sybkategoria kategorii o id 1


- catid = id rekordu ktory jest kategoria glowna


ps. mozliwe ze nagmatwalem, jezeli nie zrozumiesz to napisz ze nie rozumiesz winksmiley.jpg, postaram sie to ladniej wytlumaczyc tongue.gif
camelx
ok, rozumiem mniej więcej wszystko to, co mam zrobić w bazie danych i na jakiej zasadzie to będzie działało.
Ale przejdźmy do php. Otórz co mam zrobić w pliku *.php, żeby podkategorie wyślietlały mi się przy (lub pod) odpowiedniej kategorii głównej. Mógł byś napisać jakąś przykładową funkcję lub coś w tym rodzaju... questionmark.gif
essey
Napiszę ci coś najprostszego, według czego napiszesz swoje.

  1. <?php
  2. mysql_connect( 'host', 'user', 'pass' ); // łaczymy sie z baza danych
  3. mysql_select_db( 'baza' ); // i wybieramy baze
  4.  
  5. $pyt = &#092;"SELECT
  6. *
  7. FROM
  8. kategora
  9. WHERE
  10. level = '0'
  11. AND
  12. catid = '0'&#092;"; // zapytanie pobierajace wszystkie kategorie glowne
  13. $query = mysql_query( $pyt );
  14.  
  15. while( $wynik = mysql_fetch_array( $query ) ) // petla wyswietlajaca kategorie
  16. {
  17. echo '> '.$wynik['nazwa']; // wyswietlamy nazwe kategori
  18.  
  19. $pyt2 = &#092;"SELECT
  20. *
  21. FROM
  22. kategora
  23. WHERE
  24. level = '1'
  25. AND
  26. catid = '\".$wynik['id']; // zapytanie pobierajace wszystkie podkategorie tej kategori
  27. $query2 = mysql_query( $pyt2 );
  28.  
  29. if( !$query2 )
  30. {
  31. die( 'Blad w zapytaniu '.$pyt2 ); // jezeli zapytanie jest zle pokaze sie blad, jezeli nie ma subkategorii to petla 
  32. onizej sie nie wykona
  33. }
  34.  
  35. while( $wynik2 = mysql_fetch_array( $query2 ) )
  36. {
  37. echo '--> '.$wynik2['nazwa]; // wyswietlenie subkategorii kategorii
  38. }
  39. }
  40. ?>



pisane na zywca winksmiley.jpg moga byc bledy
Vengeance
http://forum.php.pl/index.php?showtopic=19310
camelx
Vengeance -> dzięki za linka

essEy -> użyłem tego Twojego skryptu i wszysko jest ok, tylko są jakieś problemy z pierwszą pętlą WHILE. W tej wersji którą mi dałeś wyskakuje błąd:
Cytat
Warning: Supplied argument is not a valid MySQL result resource in c:\apache\sciezka_do_pliku\cat.php on line 15
.
Zrobiłem jeszcze drugą wersję tego skryptu (m.in. dodałem template'y, i pare zmian ale mechanizm działania jest ten sam) i niby wszystko gra, tylko pierwsza pętla WHILE nie działa, tzn. wyświetla tylko pierwszą kategorię a mam ich kilka (druga while jest ok).
Co to może być? essEy był bym Ci bardzo wdzięczny za pomoc winksmiley.jpg
Pozdrawiam
wejder
Hmm...tak się zastanawiam po co wam kolumna level...


tylko problemy moze stwarzać przy tworzeniu takiego drzewka ze strony www smile.gif

ja zawsze uzywałem tylko :

id | name | id_root |

przy czym dla pierwszego poziomu id_root = null;

potem przy tworzeniu takiego drzewka...
wystarczyły insert into table ( name, id_root) values( $name, $id_root )
gdzie $name ręcznie a id_root z linka ...jako parametr smile.gif

to samo przy listowaniu drzewka..

select *,id from drzewko where id_root = null

a gdy kliknałem na liścia to pytał baze :

select *,id from drzewko where id_root = $id, gdzie $id z poprzedniego selecta biggrin.gif

wydaje mi sie ze to łątwiejsze biggrin.gif
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-2024 Invision Power Services, Inc.