Как можно сгруппировать записи в вашем запросе в порядке убывания? Требуется, чтобы подзапрос возвращал самую последнюю запись, и чтобы весь запрос также брал самые последние записи, а не первые. Можно ли сделать группировку так, чтобы оставались только последние результаты, а не первые? Как я могу правильно скорректировать запрос?
Для сортировки данных по убыванию в MySQL используется ключевое слово `DESC` после имени столбца в операторе `ORDER BY`. Пример запроса с сортировкой по убыванию: ```sql SELECT * FROM table_name ORDER BY column_name DESC; ``` Чтобы сгруппировать записи в порядке убывания и получить только самые последние записи, можно использовать подзапрос с функцией `MAX()` для определения последней записи в каждой группе, а затем объединить его с основным запросом с помощью оператора `IN`. Пример запроса с группировкой по убыванию и выбором только последних записей: ```sql SELECT * FROM table_name WHERE (column_name, date_column) IN (SELECT column_name, MAX(date_column) FROM table_name GROUP BY column_name); ``` Здесь `column_name` - это столбец, по которому вы хотите сгруппировать данные, а `date_column` - столбец даты или времени, который определяет последнюю запись в группе. Таким образом, этот запрос вернет только последние записи для каждого уникального значения в столбце `column_name`, отсортированные по убыванию даты.
Если у вас MySQL 8+ версия, то список чатов получается тривиально - используя оконную функцию:
SELECT A.* ( SELECT class_messages.id as class_messages_id `class_messages_chat`.`to_user_id`, `class_messages_chat`.`from_user_id`, `class_users`.`id`, `class_users`.`user_status`, `class_users`.`online`, `class_messages_chat`.`chat_id`, `class_messages_chat`.`ad_id`, `class_ads`.user_id, `class_ads`.title, row_number() over (partition by `class_messages_chat`.`chat_id` order by class_messages.id desc) rn -- этой функцией нумеруем в пределах чата сообщения FROM `class_messages_chat` inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id` inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id` WHERE ( `class_messages_chat`.`to_user_id` = 133337 or `class_messages_chat`.`from_user_id` = 133337) and class_messages_chat.chat_id is not null ) A where A.Rn = 1 -- оставляем, все что с первым номером счетчика order by A.class_messages_id desc