Holen Sie sich höchsten ids durch einen inner join und max id
Ich habe zwei Tabellen, die Gespräche und Nachrichten,
Was ich tun möchte, um ein inner join aus den Gesprächen zu Nachrichten.
Hier ist meine Abfrage:
SELECT
messages.msg,
messages.`read`,
conversations.userid,
conversations.contactid
FROM conversations
INNER JOIN messages ON
conversations.id = messages.convId
WHERE conversations.id IN(443,444)
Nun funktioniert alles wie es soll, aber eine Letzte Sache ist, dass die in der inneren Verknüpfung wo ich
conversations.id = messages.convId
Ich würde gerne die höchsten ids nur, wie:
AND MAX(messages.id)
Aber das funktioniert nicht
EDIT:
Ich versuchte einmal zu verwenden:
LEFT JOIN messages
ON conversations.id = messages.convId
AND messages.id = MAX(messages.id)
Aber ich bekam eine Fehlermeldung: Invalid use of group function.
- Sie können damit Ihre Nachrichten-id : BESTELLUNG DURCH Gespräche.id ASC, Nachrichten.id DESC
- geben Sie mir nur eine Zeile, ich würde gerne eine Zeile pro convId
- Nein, es gebe mehrere Zeilen. Aber mein Fehler, hätte ich geschrieben, UM DURCH die Gespräche.id ASC, Nachrichten.id DESC-GRUPPE DURCH Gespräche.id
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN
Dies funktioniert!
MAX()
Funktion, und verändert es von einem INNER JOIN auf LEFT JOIN, so dass Ihre Gespräche werden zurückgegeben, auch wenn es keine Nachrichten.AND MAX(messages.id)
auf seine eigenen arbeiten nicht, aber es sollte funktionieren, wenn Sie es vergleichen, um diemessages.id
Feld:AND messages.id = MAX(messages.id)
Du suchst den größten Wert in einer Gruppe. MySQL hat keine wirklich offensichtliche Weg, dies zu tun (viele Möglichkeiten, mit ein wenig Trickserei).
Aber, sind Sie nur auf der Suche nach zwei Gruppen. Als solche können Sie nur auf der Suche nach der Grenze in jeder Gruppe und kombinieren Sie mit
union all
:Wenn Sie Indizes auf
messages(convid, id)
undconversations(id)
, dann sollte dies Recht schnell.Können Sie auch dies tun, indem Sie ein standard-Ansatz:
die top-Lösung oben funktioniert nicht überall, zum Beispiel postgres geben Fehler eine bessere Lösung Tabellen verknüpfen, und nur die max id aus der anderen Tabelle: