#php #sql
Есть вот такая таблица : 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 больше предыдущих сообщений
Ответы
Ответ 1
Правильно ли я понимаю, что вам нужна информация об одном сообщении и соответствующему ему пользователю? Вам обязательно решить задачу одним запросом? Там будет один основной и 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']]Ответ 2
Вы можете сделать одним из двух способов: ... ORDER BY m.id desc LIMIT 1; -- дописать в конец запроса Изменить выборку по id сообщения вот так: SELECT MAX(m.id) .... В обоих случаях нужно будет убрать группировку по username, потому что она теряет смысл.
Комментариев нет:
Отправить комментарий