Есть вот такая таблица :
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']]
Комментариев нет:
Отправить комментарий