#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. Лол, друг мой, ты гений, спасибо тебе, это сработало! скорость страницы вернулась.