Tabellen joinen, aber nicht in eine Zeile
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
ausgeben
aussage
code
datenbank
datensatz
folgendes problem
frage
getrennt code
idee
kommentar
nachricht
performance
prinzipiell ruf
realisieren
speichern
stelle
tabelle
union
unterscheiden
-
Hallo,
der Titel ist wenig aussagekräftig, ich weis.
Ich hab folgendes Problem: Ich möchte eine Tabelle in sich selbst joinen, aber es sollen mehrere Datensätze rauskommen, statt das alles in einen kommt. Okay, immernoch nicht aussagekräftig. Meine Abfrage:
SELECT m1.*, m2.* FROM msg m1 LEFT JOIN msg m2 ON (m2.parentType = 'msg' AND m2.parentID = m1.messageID) WHERE m1.parentType = 'user'
so, jetzt bekomm ich m1 und m2 allerdings in einem Datensatz zusammen, anstatt getrennt.
(SELECT m1.* FROM msg m1 LEFT JOIN msg m2 ON (m2.parentType = 'msg' AND m2.parentID = m1.messageID) WHERE m1.parentType = 'user' ) UNION ( SELECT m2.* FROM msg m1 LEFT JOIN msg m2 ON (m2.parentType = 'msg' AND m2.parentID = m1.messageID) WHERE m1.parentType = 'user')
Funktioniert wie gewollt, sieht aber nicht gerade sauber aus.
Habt ihr Ideen, wie sich das elegant lösen lässt?
Vielen Dank -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mit Inner Join lässt sich das nicht realisieren.
Du hast das Richtige getan, nämlich den Union genutzt.
Wobei ich mich frage, wieso du zweimal die gleichen Datensätze untereinander haben möchtest?
Beitrag zuletzt geändert: 23.2.2011 15:49:54 von sneppa -
sind nich die gleichen Datensätze.
prinzipiell ruf ich Nachrichten auf und in der selben Abfrage gleich die Kommentare.
Nachrichten haben ein parentType und eine parentID um sie zuzuordnen
und Kommentare kommen in die selbe Tabelle, haben nur "msg" als parentType und die messageID als parentID
nun gut, dann nutz ich wohl Union :) vielen dank -
Für Nachricht + Kommentare würde ich generell 2 SQLs machen, wegen der Übersichtlichkeit.
@fchriis: In dem SQL von dir mit Union wurden beides mal die gleichen Datensätze abgefragt, deswegen die Aussage mit den gleichen Datensätze.
Beitrag zuletzt geändert: 23.2.2011 16:42:00 von sneppa -
An der Stelle ist mir aber Performance wichtiger.
Die Querys unterscheiden sich nur darin, dass einmal m1.* und einmal m2.* zurückgegeben wird -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage