2016-10-09 1 views
1

Я создаю веб-чат-систему (mysql, php, jquery), указанную в диалогах, где каждый разговор показывает только последнее отправленное сообщение. (например, fb).заменить подзапрос mySQL на Join

В таблице есть следующие поля, где 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

Это основано на внутреннем соединении (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 
+0

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

+0

@Max хорошо, если мой ответ правильный, отметьте ma ответ как принято посмотреть, как с помощью этой ссылки http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – scaisEdge

+0

Да, спасибо , Готово. Я просто не мог принять ваш ответ ниже первых 15 минут после публикации вопроса. Еще раз спасибо. – Max