Ilja: mySQL SELECT

Beitrag lesen

yo,

so bin zuhause angekommen, feierabend allerdings kein bier im kühlschrank.

Aber wie die Funktionieren verstehe ich immer noch nicht.

das geht fast allen so, an den outer joins muss man sich erst einmal gewöhnen.

hätte ich mittabelle1 angefangen, hätte ich sie zweimal verwenden müssen, was ja nicht unbedingt sein muss"

ich vermute mal, dein gedankenproblem ist, dass du immer nur outer joins für alle tabellen verwdenden willst. man kann die joins aber auch untereinander "vermischen", je nachdem wie zwei tabellen miteinander verbunden werden sollen.

Dort benutze ich 5 Tabellen.
2 Davon dienen aber nur dazu Daten einer Tabelle der anderen zuzuordnen.

wenn dort immer zu einem eintrag auch der jeweilige passende andere eintrag steht, dann nimmmst du sie als inner joins rein. lass mich das prinzip noch mal erklären.

wenn du in der einen tabelle die mitarbeiter gespeichert hast und du wissen willst, ob sie kinder haben und wenn ja, welche das sind, dann brauchst du einen outer join dafür, weil ja nicht jeder mitarbeiter kinder haben muss, du ihn aber trotzdem mit auflisten willst. sprich zeige mir alle datensätze der mitarbeiter und wenn vorhanden ihre kinder.

wenn du nun aber noch die abteilung wissen willst, die ein mitarbeiter arbeitet, macht man das in aller regel mit einem inner join, weil jeder mitarbeiter ja in einer abteilung arbeitet. und beides kann man in einer abfrage miteinander kombinieren.

auf dein beispiel angewandz heisst das, du musst nur dort outer joins einsetzten, wo nicht zwingend ein oder mehrere gegenparts vorhanden sein müssen.

also events ist der ausgangspunkt.

SELECT spalten
FROM events e
WHERE e.lang = 'Englisch'
AND e.id = 'id_nummer';

so und nun ist die frage, in welchen tabelen gibt es immer einen gegenpart. ich vermute einfach mal und denke wir können die companys mit inner join mit reinnehmen.

SELECT spalten
FROM events e,lnk_event_conductor AS lec, contacts AS c
WHERE e.lang = 'Englisch'
AND e.id = 'id_nummer'
AND e.id = lec.id_event
AND lec.id_event = c.id;

ok, nun kommen wohl die outer joins ins spiel. mal von deinem design fehle der tabellen abgeshen, da es sich meiner meinung nach um eine 1:n beziehung habdelt und nicht um eine n:m, könnte man sich auch eine tabelle sparen. es sei den, dass nicht nur ein event mehrere bilder haben kann, sondern ein bild auch zu mehreren events gehören kann. dann will ich nichts gesagt haben.

SELECT spalten
FROM lnk_event_conductor AS lec, contacts AS c, events e
LEFT JOIN lnk_event_pic AS lep ON (e.id = lep.id_event)
LEFT JOIN pictures_events AS pe ON (lep.id_event = pe.id)
WHERE e.lang = 'Englisch'
AND e.id = 'id_nummer'
AND e.id = lec.id_event
AND lec.id_event = c.id;

e viola

Ilja