Autor Zpráva
SwimX
Profil
Dobrý den,
mám tabulku
kategorie
id_kat  |  id_nad  |  nazev  |  poradi
záznamy s id_nad = 0 jsou kategorie
záznamy s id_nad = nějakému id_kat, jsou podkategorie patřící do kategorie id_kat.
Pořadí. Kategorie s poradi 1 bude 1., 2 bude 2., a záznamy s poradi = 0 budou potom, sežazeny podle nazvu ASC.
Stejně tak budou seřazeny podkategorie v kategorii.

Jak mám toto dostat do jednoho dotazu, aby se mi to vrátilo i seřazené? Stále se mi na to nedaří přijít. (pro uživatele se budou vypisovat jen ty položky, kde je v podkategorii nějaká prezentace. Tab: prezentace id_prez, id_kat, nazev, to už ale azřídí jednoduchý JOIN)


Děkuji za veškeré rady
ninja
Profil
Managing Hierarchical Data
SwimX
Profil
ninja:
Děkuji, bylo to přínosné, přesto si to tu nechám ještě jedno uzkritizovat.

Na výpis kategorií + podkategorií těch, kde existuje nějaká prezentace používám toto:
SELECT DISTINCT t1.nazev kat_nazev, t1.id_kat kat_id, t2.nazev podkat_nazev, t2.id_kat podkat_id, t1.url kat_url, t2.url podkat_url
FROM kategorie t1
JOIN kategorie t2 ON t2.id_nad = t1.id_kat
JOIN prezentace p ON p.id_kat = t2.id_kat
ORDER BY t1.poradi != 0 DESC, t1.poradi, t1.nazev, t2.poradi != 0 DESC, t2.poradi, t2.nazev
Vrátí mi to záznamy ve stylu:
kat_nazev      kat_id     podkat_nazev     podkat_id     kat_url     podkat_url 
Zip with        21          zipka            22          zip-with      zipka
Zip with        21          zipka druha      24          zip-with      zipka-druha
...

Při přidávání prezentace mu v selectu nabízím všechny podkategorie, které existují bez ohledu na počet prezentací v nich (čili bez JOIN prezentace)


Při výpisu všech kategorií a podkategorií, které v DB jsou, bez ohledu na to, zda v nich existuje prezentace nebo podkategorie používám toto:
SELECT DISTINCT t1.nazev kat_nazev, t1.id_kat kat_id, t2.nazev podkat_nazev, t2.id_kat podkat_id, t1.url kat_url, t2.url podkat_url
FROM kategorie t1
LEFT JOIN kategorie t2 ON t2.id_nad = t1.id_kat
WHERE t1.id_nad = 0
ORDER BY t1.poradi != 0 DESC, t1.poradi, t1.nazev, t2.poradi != 0 DESC, t2.poradi, t2.nazev


Pokud se to někomu chtělo číst, a pak ještě řešit, tak děkuji za případné připomínky. (Vše mi funguje, takže dotaz nemám žádný, jen kdybyste tam viděli chyby :)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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