Matze: MySQL Abfrage Problem bei der richtigen Ausage

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

  1. 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

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. 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.

      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