заменить подзапрос MySQL на Join

#mysql #join #subquery

#mysql #Присоединиться #подзапрос

Вопрос:

Я создаю веб-систему чата (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:

Это основано на внутреннем соединении (динамическом), а не в

 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 
  

Комментарии:

1. Лол, друг мой, ты гений, спасибо тебе, это сработало! скорость страницы вернулась.