Autor Zpráva
hrouda
Profil
Zdravím,

mám tabulku kategorie, kde mám:

ID nazev id_nadkategorie
1 trička 0
2 pan. tr. 1

pan. tr. = pánské trička ( tady jsem to zkrátil at se to vleze)

a tabulku nadkategorie

id nazev
1 tricka
2 panske tricka
a tak mám asi 25 záznamů, a nemůžu přijít na to jak napsat sript aby se mi v odrážkách udělal strom těch kategorií.

Zkoušel jsem :
<?php

include "dbc.php"

$vysledek = ("SELECT nazev FROM kategorie, nadkategorie WHERE kategorie.id_nadkategorie = nadkategorie.id LIKE '1'");
while ($dotaz = mysql_fetch_row($vysledek)){
      
      echo "<li>".$dotaz[nazev]."</li>";
 }
        
?>

Ale neúspěšně. Nevypíše to ani čárku.
Taps
Profil
hrouda:
zkus
SELECT nazev FROM kategorie, nadkategorie WHERE kategorie.id_nadkategorie = nadkategorie.id AND nadkategorie.id=1
hrouda
Profil
výsledek je pořád stejný, nic to nevypíše
anonymní
Profil *
nikde nevoláš mysql_query. Nevím, proč máš dvě tabulky, když bohatě stačí jedna. A nakonec, stromová data to vypisovat nemůže, nikde neotevíráš zanořené seznamy, píšeš jen samá LI.

Tvůj dotaz ani žádný strom vypsat nemůže. „Nazev“ není jednoznačný (je v obou tabulkách), pracuješ jen s jednou nadkategorií (id=1), nevím, jak by takový strom vypadal.

SQL dotaz bude:
SELECT id, nazev FROM kategorie ORDER BY id_nadkategorie ASC

V kódu si pak ukládej stav poslední nadřazené kategorie a v momentě, kdy bude odlišná od současné, otevřeš nový zanořený seznam.
hrouda
Profil
To ukládání provedu prosímtě jak ?

Upravil sem to tak:
<?php
 
include "dbc.php";
 
$vysledek = ("SELECT id, nazev FROM kategorie ORDER BY id_nadkategorie ASC");
while ($dotaz = mysql_fetch_array($vysledek)){
      
      echo "<li>".$dotaz[nazev]."</li>";
 }
        
?>
anonymní
Profil *
hrouda:
přiřazení do proměnné.

Chtělo by to naučit se nejprve základy jazyka, než se pouštět do nějakého e-shopu. Nebo i placeného projektu malého rozsahu.
hrouda
Profil
Praveze se ted ucim, tak uvitam kazdou radu :-))
anonymní
Profil *
hrouda:
rady jsi dostal, během těch pár okamžiků mezi reakcemi nemáš ani šanci si je pořádně přečíst a promyslet. Natožpak prostudovat a snažit se na řešení přijít.

Očekáváš jen dodaný kompletní kód, který ode mě nečekej. Návodné rady máš, ani v kódu v [#5] není to, co bylo razeno dříve.
hrouda
Profil
Chybu proč nevypisuje sem našel, jen musim nejak upravit dotaz protoze výsledek je:

Tricka
Ponozky
Bundy
Boty
Dámské tri?ka
Panské tri?ka
Zimní ponožky
Podzimní ponožky
Letní ponožky
Jarní ponožky
Letní bundy
Zimní bundy
Tenisky
Gumáky
Papuče
Pánské tri?ka s krátkým rukávem
Pánské trička s dlouhým rukávem
Dámské tricka s krátkým rukávem
Dámské trička s dlouhým rukávem
Dětské letní bundy
Pánské letní bundy
Dámské letní bundy
Pánské zimní bundy
Dámské zimní bundy
Dětské zimní bundy

A já potřebuju aby to bylo:

kategorie
-podkategorie
--podkategorie
---podkategorie

To by mělo teda vyřešit otvírání zanořených seznamů jo ?
anonymní
Profil *
hrouda:
To by mělo teda vyřešit otvírání zanořených seznamů jo ?
samozřejmě, myslíš, že to píšu jen tak?

Jak by podle tebe mělo samotné HTML nebo CSS poznat, kde si ráčíš mít zanoření a kde ne?
Taps
Profil
hrouda:
Pro inspiraci http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php
hrouda
Profil
přijdu si jak maďar
martin1312
Profil
Taps:
traverzovanie je myslím pre začiatočníka veľké sústo, teda ak treba dáta aj spravovať, nie len vypisovať. Poradil by som skôr klasické (nie vhodné) vypisovanie rekurzívnou funkciou a so stĺpcom "parent_id".
Taps
Profil
martin1312:
Možná by nebylo na škodu toto diskusní téma obohatit i o tvoji praktickou verzi, určitě se to bude někomu dalšímu hodit
martin1312
Profil
V tomto článku je to popísané http://wizardinternetsolutions.com/articles/web-programming/single-query-dynamic-multi-level-menu
Príklad nerobí rekurzívne dotazovanie do databázy ale najskôr dáta natiahne do PHP a v ňom sa rekurzívne vypisujú, teda je to podľa mňa lepšie riešenie ako dotaz v cykle (na úkor pamäte pri php).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0