用Join替换子查询mySQL

时间:2016-10-09 19:41:33

标签: mysql join subquery

我正在建立一个基于网络的聊天系统(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或其他内容的子查询以避免延迟?

1 个答案:

答案 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