Ich versuche, 2 Spalten aus der Unterabfrage in der folgenden Abfrage auszuwählen, kann dies jedoch nicht. Es wurde versucht, eine Alias-Tabelle zu erstellen, sie konnte jedoch nicht abgerufen werden.
SELECT
DISTINCT petid,
userid,
(SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate,
(SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID
FROM
pet LEFT JOIN comments ON pet.id = comments.petid
WHERE
userid='ABC' AND
deviceID!='ABC' AND
comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH);
Grundsätzlich versuche ich, das lastComDate
& lastPosterID
aus derselben Zeile zu erhalten - der Zeile, die in den Kommentaren für das jeweilige Haustier die neueste ist. Bitte schlagen Sie vor, wie ich sie auf effiziente Weise erhalten kann.
Die obige Abfrage funktioniert, scheint jedoch zu viel zu sein, da dieselbe Zeile zweimal abgerufen wird. Darüber hinaus ist die ORDER BY
Klausel erheblich langsamer als die Aggregatfunktion - wie ich bei der Profilerstellung festgestellt habe. Eine Lösung, die das Sortieren vermeidet, wäre also wünschenswert.
quelle
deviceID
ist vompets
Tisch - was bedeutet, dass ich nicht die Haustiere bekomme, die von 'ABC' selbst eingereicht wurden.Antworten:
Sie können Ihre Unterabfrage auch in eine temporäre Tabelle verschieben, wenn die Leistung später beeinträchtigt wird.
quelle
NULL
für beidelastComDate
undlastPosterId
für alle Datensätze zurück.Vorausgesetzt, Ihre Tabellen sehen folgendermaßen aus:
Diese Abfrage sollte den Trick machen:
quelle