我正在建立一个基于网络的聊天系统(mysql,php,jquery),按对话列出,每个对话显示最后发送的消息。 (如fb)。
该表包含下一个字段,其中conversation_code
是唯一标记,由会话中的所有消息共享。
id_message, id_sender, id_receiver, conversation_code, message_date,
我目前正在使用此SQL查询:
SELECT * FROM table_messages
WHERE message_date IN (SELECT max(message_date)
FROM table_messages WHERE id_sender='$id_session' OR id_receiver='$id_session'
GROUP BY conversation_code)
ORDER BY message_date DESC
此查询按预期返回结果,但加载时延迟太多(ajax)。我被告知这种延迟是因为子查询的使用。是否有其他方法可以替换JOIN
或其他内容的子查询以避免延迟?
答案 0 :(得分:1)
这是基于内部联接(dinamic)而不是
SELECT a.* FROM table_messages as a
INNER JOIN
(SELECT max(message_date) as md
FROM table_messages
WHERE id_sender='$id_session' OR id_receiver='$id_session'
GROUP BY conversation_code) t on t.md = a.message_date
ORDER BY a.message_date DESC