SELECT * FROM messages
JOIN (
SELECT MAX(id) AS id
FROM messages
WHERE 2 IN (receiver_id, sender_id) -- useless if the table really only contains messages between you and another person
GROUP BY IF(receiver_id = 2, sender_id, receiver_id) -- GROUP BY either sender_id or receiver_id, depending on which end of the exchange you are (will perform very poorly)
) AS last_message USING (id)
繼knittl的評論,在上述假設的單調遞增id
(諸如auto_increment
列)。如果不是的話,那麼你就不得不求助於醜如這樣的:
SELECT * FROM messages
JOIN (
SELECT MAX(datetime) AS datetime, IF(receiver_id = 2, sender_id, receiver_id) AS other_id
FROM messages
WHERE 2 IN (receiver_id, sender_id)
GROUP BY other_id
) AS last_message ON
last_message.datetime = messages.datetime
AND last_message.other_id = IF(receiver_id = 2, sender_id, receiver_id) -- this line is superfluous if only one message may be sent or received within one given second
你能提供數據的錶轉儲或sqlfiddle? – Lee