MySQL Abfrage Problem bei der richtigen Ausage
Matze
- php
content
----------------------------------------------
id titel_1 content_1
178 test Wir über uns test_content_1
179 test Unser Team test_content_2
180 test Restauration test_content_3
181 test Schlüsselfertig test_content_4
182 test Wintergärten test_content_5
183 test Zimmerhandwerk test_content_6
menu
----------------------------------------------
menu link
Wir über uns 178
Leistungen 0
Referenzen 0
Immobilien 0
Kontakt 0
submenu
---------------------------------------------
submenu link
Unser Team 179
Restauration 180
Schlüsselfertig 181
Wintergärten 182
Zimmerhandwerk 183
Hallo kann mir wer helfen wie ich folgende SQL Abfrage mache?
Ich möchte alle titel_1 und content_1 zeilenweise ausgeben, wo die id = menu.link ist oder wo die id= submenu.link ist.
Also das ist meine SQL Abfrage aber mir wird einfach zuviel Ausgegeben?
SELECT content.id, content.content_1, content.titel_1,
menu.link, menu.menu, submenu.link, submenu.submenu FROM
content, menu, submenu WHERE
content.id = menu.link OR
content.id = submenu.link
ORDER BY titel_1 ASC
Wo ist da der Fehler? Als Ausgabe habe ich alles doppelt und dreifach :-(
Hat einer eine Idee wo der Fehler steckt?
Danke!
Gruß Mathes
Halihallo Matze
Also das ist meine SQL Abfrage aber mir wird einfach zuviel Ausgegeben?
SELECT content.id, content.content_1, content.titel_1,
menu.link, menu.menu, submenu.link, submenu.submenu FROM
content, menu, submenu WHERE
content.id = menu.link OR
content.id = submenu.link
ORDER BY titel_1 ASC
Du machst einen Cross-Join zwischen content, menu und submenu. Aus diesem wählst du
Einträge aus, dessen content.id=menu.link oder content.id=submenu.link sind. _Aber_
falls eine Bedinung zutrifft (z.B. content.id=menu.link) hast du vom cross-join noch
immer _alle_ submenu-links dabei. Wenn du jedoch nur die content-Informationen brauchst,
kannst du einen GROUP BY content.id vor ORDER BY einfügen.
BTW: Das Datenkonzept finde ich etwas unklug, es sei denn du kannst auf Ewigkeiten sagen,
dass du nie mehr als eine Hierarchiestufe benötigst... Und wie teilst du die Beziehung
menu->submenu aus?
Viele Grüsse
Philipp
Halihallo Matze
Also das ist meine SQL Abfrage aber mir wird einfach zuviel Ausgegeben?
SELECT content.id, content.content_1, content.titel_1,
menu.link, menu.menu, submenu.link, submenu.submenu FROM
content, menu, submenu WHERE
content.id = menu.link OR
content.id = submenu.link
ORDER BY titel_1 ASCDu machst einen Cross-Join zwischen content, menu und submenu. Aus diesem wählst du
Einträge aus, dessen content.id=menu.link oder content.id=submenu.link sind. _Aber_
falls eine Bedinung zutrifft (z.B. content.id=menu.link) hast du vom cross-join noch
immer _alle_ submenu-links dabei. Wenn du jedoch nur die content-Informationen brauchst,
kannst du einen GROUP BY content.id vor ORDER BY einfügen.
Danke erstmal für den Tip!
BTW: Das Datenkonzept finde ich etwas unklug, es sei denn du kannst auf Ewigkeiten sagen,
dass du nie mehr als eine Hierarchiestufe benötigst... Und wie teilst du die Beziehung
menu->submenu aus?
Ich habe in meinem Beispiel auch nicht die Komplette Tabelle abgebildet... Die Beziehung wird über die mid aufgebaut, die in menu und submenu ist.
Gruß Mathes
Viele Grüsse
Philipp