Supportnet / Forum / Datenbanken
Abfrage-Problem
Frage
Sorry, habs in nen angefangenen Thread gepostet, hier nochmal:
Hallo,
ich hab mal wieder ein kleines DB-Problem, also besser: Einen Logik-Blackout :-) - ich hoffe, jemand kann mir bei einer Abfrage helfen:
Es handelt sich um eine Song-Datenbank die wie folgt aufgebaut ist:
artists: aid, artist
titles: tid, title, aid
categories: cid, category
songs: sid, tid, cid, version, time, bpm
songs_dances: sid, did
dances: did, dance
songs_favourites: fid, sid
favourites: fid, name
songs_media: sid, mid, track
media: mid, cdname (und andere attribute)
So, vielleicht noch zur Erklärung: "Herzstück" ist die SONGS-Tabelle. Hier sind die einzelnen Songs gespeichert. Ein "Titel" im engeren Sinne ist eine Kombination aus Titel (z.B. '99 Luftballons') und Interpret (z.B. Nena). Deshalb sind Titel und Interpreten in 2 andere Tables ausgelagert, und Interpret & Titel über die aid, der Titeldatensatz dann über tid mit Songs verknüpft. "Songs" wiederum können auch mehrmals denselben Titel, aber in unterschiedlichen Versionen enthalten. PK bei den Songs ist die SID. Jeder Song gehört einer Kategorie (über cid) an. So, jetzt kommen die fizzeligen Dinge: Auf manche Songs kann man tanzen (Rumba, ChaCha, usw.), und zwar 0-n Tänze. d.h.: In der Table songs_dances können n datensätze mit der sid, aber unterschiedlichen did enthalten sein. Kann man auf den Song nicht tanzen, gibt es hier auch keinen Datensatz. Im Prinzip das gleiche gilt für die CDs (Media) auf denen sich die Songs befinden: Ein Song kann auf mehreren CDs sein.
Zusätzlich kann man Favoritenlisten erstellen, und Songs diesen Listen (0-n-fach) zuordnen.
Ich brauche nun eine Abfrage, die mir sozusagen zu einem Song alles liefert: Titel, Interpret, die Attribute aus Songs selbst, dazu Tänze, Favoriten, CDs. Nachteil: wenn man z.B. auf songs.sid = songs_dances.sid prüft, dann bekäme man nur Songs, auf die man tanzen kann. Ich möchte aber eine Gesamtliste.
Wie schaffe ich das?
Ich freue mich über Vorschläge; bei Bedarf kann ich noch die verschiedenen Statements posten, die ich schon getestet habe, aber ich glaube, die sind völlig verquer (es kommt meistens ein Skalarprodukt raus, das die mySQL-DB dann nicht mehr verkraftet).
Antwort 1 von ThomasOOP
wäre es schlimm daraus 2 selects zu machen ?
erst das dance weglassen und erst beim 2 select dazuladen ( wenns denn vorhanden ist ? )
ansonsten würde mir noch ein left join einfallen
left join =
alle daten aus tabelle a und aus tabelle b die daten, wenn sie denn vorhanden sind
genauer syntax bitte ergooglen, da hab ich jetzt keinen nerv für ;-)
erst das dance weglassen und erst beim 2 select dazuladen ( wenns denn vorhanden ist ? )
ansonsten würde mir noch ein left join einfallen
left join =
alle daten aus tabelle a und aus tabelle b die daten, wenn sie denn vorhanden sind
genauer syntax bitte ergooglen, da hab ich jetzt keinen nerv für ;-)
Antwort 2 von Flooooo
@Thomas:
Ja, ich habs dann vor ein paar Tagen mit LEFT-JOINS gelöst, das funktioniert dann einwandfrei.
2 Abfragen würden zwar notfalls gehen, aber das wäre ja Blödsinn - wozu hab ich denn die Datenbank? :-)
Ja, ich habs dann vor ein paar Tagen mit LEFT-JOINS gelöst, das funktioniert dann einwandfrei.
2 Abfragen würden zwar notfalls gehen, aber das wäre ja Blödsinn - wozu hab ich denn die Datenbank? :-)

