Страницы

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

суббота, 4 апреля 2020 г.

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

#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, потому что она теряет смысл.

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

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