2016-11-22 2 views
1

Ich habe diese zwei Abfragen, wo ich nicht in der Lage bin, sie richtig zu kombinieren.Wie kann ich diese 2 Abfragen zu einem kombinieren?

mag ich Kommentare für eine bestimmte Diskussion bekommen und jeder Kommentar mehr Bilder haben kann, die in der Bilder-Tabelle gespeichert werden.

SELECT c.CommentID, c.Body, u.Name 
FROM Comments c 
JOIN User u ON u.UserID = c.InsertUserID 
WHERE c.DiscussionID = 1 

SELECT Path 
FROM Images 
WHERE commentID = ? 

Dies ist, was ich mit aufkam, aber es funktioniert nicht:

SELECT c.CommentID, c.Body, u.Name, i.Path 
FROM Comments c 
JOIN User u ON u.UserID = c.InsertUserID 
LEFT JOIN Images i ON c.CommentID = i.ForeignID 
WHERE c.DiscussionID = 1 
+0

Warum würde CommentID ImageID gleich? Zeigen Sie Ihre Tabellenschemas an. Wie hängen die Tabellen zusammen? –

+0

Entschuldigung, Tippfehler. CommentID ist identisch mit Images.ForeignID – crispychicken

+1

Okay, nächste Frage. Welcher Teil funktioniert nicht, was siehst du im Vergleich zu dem, was du erwartest? –

Antwort

2
SELECT c.CommentID, c.Body, u.Name, (SELECT GROUP_CONCAT(Path SEPARATOR "\n") FROM Images i WHERE i.commentID = c.CommentID) as 'images' 
FROM Comments c 
JOIN User u ON u.UserID = c.InsertUserID 
WHERE c.DiscussionID = 1 

Sie werden für jeden Kommentar eine Zeile erhalten und alle Kommentar Bilder werden in ‚Bilder‘ sein Feld. Bilder werden durch das Zeichen newline ("\n") getrennt.

JOIN Version wie gewünscht:

SELECT c.CommentID, c.Body, NAME, GROUP_CONCAT(Path SEPARATOR "\n") AS 'images' 
FROM Comments c 
LEFT JOIN Images i ON(i.commentID = c.CommentID) 
WHERE c.DiscussionID = 1 
GROUP BY c.CommentID 

Beachten Sie, dass JOIN Version könnte nicht so effizient wie die Unterabfrage Version. Die GROUP BY-Phase in der ersten Abfrage findet auf der Unterabfrageebene statt, während sie bei der zweiten Abfrage erfolgt, nachdem alle Zeilen bereits verbunden wurden. Natürlich könnte der Abfrageoptimierer hier etwas Magie wirken und sie könnten die gleichen Kosten haben.

+0

Ist es auch möglich mit Join statt zu wählen? – crispychicken

+0

@crispychicken Siehe aktualisierte Antwort. – matt

Verwandte Themen