Страницы

Поиск по вопросам

пятница, 21 июня 2019 г.

Как выбрать последние сообщения?

Есть вот такая таблица : id | id_from | id_for | message | message_status И есть такой запрос:
SELECT m.message AS message, fu.username AS username, fu.img AS img, fu.id as id, m.message_status as status, m.id as idm FROM users AS fu LEFT JOIN user_message AS m ON m.id_for = fu.id WHERE m.id_from = "'.$_SESSION['id'].'" order by idm desc
Сейчас он выбирает первое сообщение в чате между пользователями, а мне нужно последнее. Т.е message где id больше предыдущих сообщений


Ответ

Правильно ли я понимаю, что вам нужна информация об одном сообщении и соответствующему ему пользователю? Вам обязательно решить задачу одним запросом? Там будет один основной и 3 коррелированных запроса или JOIN. Это не всегда самый продуктивный путь - уложить все в один запрос. Выполните два запроса - это тоже не так много. Первым запросом извлеките всю информацию об адресатах
SELECT message AS message, id_for AS id_for, message_status as status, id as idm FROM user_message WHERE id_from = "'.$_SESSION['id'].'" ORDER BY m.id DESC
В цикле вы помещает всю информацию об ответах в массива $answers, плюс дополнительно готовите массив $id_for с идентификаторами пользователей. Далее выполняете запрос
SELECT * FROM user WHERE id IN ( ".implode(",", $id_for)." )
Помещаете информацию обо всех пользователей в ассоциативный массив $users, в котором ключем служит идентификатор пользователя. Затем в цикле формируете таблицу ответов $answers, когда нужно получить информацию о пользователе обращаетесь к массиву $users
$users[$answers['id_for']]

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

Отправить комментарий