Strana 1 z 1

Vycuc dat z viac ako 4 tabuliek (MySQL) problem

Napísané: Pi Okt 21, 2011 6:53 pm
od užívateľa stelmi
Zdravim, neviem kam to mam napisat, snad pisem dobre.
Mam problem pri vyberani dat z viacerych tabuliek jednym sql dopytom.

Problem:

Mam takyto strom:
  • Kategoria1
    • Podkategoria1
    • Podkategoria2
      • PodPodkategoria1
      • PodPodkategoria2
      • PodPodkategoria3
    • Podkategoria3
  • Kategoria2
Mam 4 hlavne tabulky:
- Texty
- Obrazky
- Video
- Hudba

Jednu tabulku Kateorie

4 spojovacie tabulky:
- Texty_kategorie
- Obrazky_kategorie
- Video_kategorie
- Hudba_kategorie

V tabulke kategorie je klasicky ulozeny strom kategorii, v hlavnych tabulkach je obsah produktov, spojovacie tabulky zabezpecuju to, ze v jednej kategorii moze byt viac produktov, ale jeden produkt moze byt vo viacerych kategoriach.

Kedze kategoria moze mat podkategorie, ma kategorizacia produktov sluzit len ako nejaky filter. cize ked si kliknem na Kategoria1, zobrazi sa mi obsaz zo vsetkych pod kategorii a podpodkategorii (hierarchicky). Ked kliknem na podkategoriu 2, zobrazia sa mi data ktore su v podpodkategoriach danej podkategorie, atd...

A potrebujem spravit dump, aby mi vratil vsetky produkty, ktore sa nachadzaju v danom zozname kategorii (nejaky zoznam id kategorii), unikatne podla id produktu, zoradene podla niecoho (napr datum),

Problem je v tom, ze neviem zostavit sql dump tak, aby mi vratil hodnoty zo vsetkych tabuliek tak ako treba. Stale mi to vracia len prvu tabulku, alebo prve dve tabulky.

skusal som to takto:

Kód: Vybrať všetko

SELECT c.id, c.topic, a.topic, gi.topic, gm.topic, gmu.topic FROM categories c

LEFT JOIN articles_categories ac ON (c.id = ac.category)
LEFT JOIN articles a ON (a.id = ac.article)
LEFT JOIN gallery_images_categories gic ON (c.id = gic.category)
LEFT JOIN gallery_images gi ON (gi.id = gic.image)
LEFT JOIN gallery_movies_categories gmc ON (c.id = gmc.category)
LEFT JOIN gallery_movies gm ON (gm.id = gmc.movie)
LEFT JOIN gallery_music_categories gmuc ON (c.id = gmuc.category)
LEFT JOIN gallery_music gmu ON (gmu.id = gmuc.music)
WHERE a.topic IS NOT NULL OR gi.topic IS NOT NULL OR gm.topic IS NOT NULL OR gmu.topic IS NOT NULL
to mi vratilo len stlpce c.id a c.topic, ostatne boli NULL

a metoda:

Kód: Vybrať všetko

SELECT DISTINCT c.id, a.topic FROM
categories c 
INNER JOIN articles a ON ( a.id IN (SELECT article FROM articles_categories WHERE category = c.id ) )
mi vie zobrat iba 2 tabulky, pri viac ako 2 tabulkach mi to vracia null result

Viete mi niekto poradit ako to mam spravit?

Re: Vycuc dat z viac ako 4 tabuliek (MySQL) problem

Napísané: Ut Nov 08, 2011 11:42 pm
od užívateľa _rasel^
Ahoj, ako konkrétne vyzerá štruktúra tých tabuliek?
(Nechce sa mi prečísliš rozmýšľať a vymýšľať štruktúru a dáta, aby som to mohol otestovať... bolo by možné poskytnúť prístup do PhpMyAdmina, alebo niejakú zálohu DB? Ak áno, tak mi napíš v súkromnej správe.)

Re: Vycuc dat z viac ako 4 tabuliek (MySQL) problem

Napísané: Št Feb 09, 2012 4:18 pm
od užívateľa puschpull
Něco podobného jsem programoval na web svého bráchy:
http://dawep.net
např:
http://dawep.net/galerie.php?id=9 (zobrazí kategorri "Ptáci" i všechny podkategorie

(_rasel^ mi v tomto také významě pomohl, díky jemu!)