快速修復可能會改變你的子查詢
SELECT max(msgId) FROM tbl_messages GROUP BY msgFromUserId, msgToUserId
到
SELECT max(msgId)
FROM tbl_messages
GROUP BY LEAST(msgFromUserId, msgToUserId), GREATEST(msgFromUserId, msgToUserId)
這將組消息從292646到1和從1到292646的最後一行一起。
完整的查詢:
爲了提高性能,你也應該將用戶ID條件爲子查詢:
SELECT max(msgId)
FROM tbl_messages
where (msgFromUserId=292646 or msgToUserId=292646) -- <-- here
GROUP BY LEAST(msgFromUserId, msgToUserId), GREATEST(msgFromUserId, msgToUserId)
要使用索引,你應該使用的最佳方法UNION ALL優化。但是,這會看起來非常複雜:
SELECT max(msgId)
FROM (
SELECT msgToUserId as otherUserId, max(msgId) as msgId
FROM tbl_messages
WHERE msgFromUserId=292646
GROUP BY msgToUserId
UNION ALL
SELECT msgFromUserId as otherUserId, max(msgId) as msgId
FROM tbl_messages
WHERE msgToUserId=292646
GROUP BY msgFromUserId
) sub
GROUP BY otherUserId
注意,這只是在WHERE子句(tbl_messages.msgId in (...)
)中使用子查詢。
此子查詢也可以用來作爲派生表,所以我們可以tbl_messages
加入它:
SELECT msgId as `ID`,
msgFromUserId,
msgToUserId,
DATE_FORMAT(msgDate,'%d/%m/%y %H:%i') as `time`,
MID(msgText,1,30) as `text` ,
(CASE WHEN (msgFromUserId=292646) then b.user_login else a.user_login END) as `sender`
FROM (
SELECT max(msgId) as msgId
FROM (
SELECT msgToUserId as otherUserId, max(msgId) as msgId
FROM tbl_messages
WHERE msgFromUserId=292646
GROUP BY msgToUserId
UNION ALL
SELECT msgFromUserId as otherUserId, max(msgId) as msgId
FROM tbl_messages
WHERE msgToUserId=292646
GROUP BY msgFromUserId
) sub
GROUP BY otherUserId
) sub
inner join tbl_messages on tbl_messages.msgId = sub.msgId
inner join wp_users as a on tbl_messages.msgFromUserId=a.ID
inner join wp_users as b on tbl_messages.msgToUserId=b.ID
inner join tbl_forum_users u1 on tbl_messages.msgFromUserId=u1.user_ID
inner join tbl_forum_users u2 on tbl_messages.msgToUserId=u2.user_ID
order by tbl_messages.msgId desc
您需要以下指標來支持子查詢:
tbl_messages(msgFromUserId, msgToUserId [, msgId])
tbl_messages(msgToUserId, msgFromUserId [, msgId])
你能做的就是'訂單DESC'你從'last到first'的順序獲得行,然後'LIMIT 1',你得到唯一的最後一行,即。第一行 – Alen
您是否對錶和列定義有嚴重問題?記錄107和26具有相同的發送者。當有其他'FromUserId'時它不應該改變嗎? – Whencesoever
你爲什麼加入'tbl_forum_users'?你在哪裏使用'u1'和'u2'? –