Mam problem pri vyberani dat z viacerych tabuliek jednym sql dopytom.
Problem:
Mam takyto strom:
- Kategoria1
- Podkategoria1
- Podkategoria2
- PodPodkategoria1
- PodPodkategoria2
- PodPodkategoria3
- Podkategoria3
- Kategoria2
- 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
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 ) )
Viete mi niekto poradit ako to mam spravit?