@Alk90
php, mysql, jquery, css, html, api

Как обновить записи с группировкой?

Всем привет!
У меня есть запрос, который возвращает записи из таблицы с группировкой. Может получиться так, что будет возвращена одна строка, в которой сгруппированы несколько сотен записей. Упрощенный пример:
SELECT `id`, `status`, `type` 
FROM `table`
GROUP BY `type`
ORDER BY `date`
LIMIT 0, 20

После того как я получил записи, я хочу изменить статус на "получено", каждой из возвращенных записей, включая те, которые были сгруппированы.
У меня была идея с помощью GROUP_CONCAT получить все ID сгруппированных записей и одним запросом с помощью WHERE IN() изменить их статус. Но этот вариант не подходит, т.к. придется лепить костыли (из-за ограничений MySQL) для случаев, когда в группировке окажется несколько тысяч ID.
Выход для меня был бы таким (но конечно же он не работает):
UPDATE `table` SET `status` = 1
GROUP BY `type`
ORDER BY `date`
LIMIT 0, 20


Натолкните пожалуйста на мысль, что делать
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ваш запрос не будет работать в новых версиях MySQL с настройками по умолчанию. При группировке все выбираемые поля должны быть агрегатными функциями или полями, по которым идёт группировка.
В старых версиях запрос отработает, но ничего осмысленного не выдаст. Если есть две записи с разными id и одинаковыми type, то какой из этих id вы расчитываете получить? MySQL не гарантирует какого-либо определённого значения в этом случае. Как и не гарантирует, что выбранные id и status будут из одной строки.
Ответ написан
@BorisKorobkov Куратор тега MySQL
Web developer
Если надо получить "N новых лайков, K новых ответов", то
SELECT `type`, COUNT(*) as cnt
FROM `table`
WHERE user_id = ... AND status = 0
GROUP BY `type`


Отметить всё прочитанным:
UPDATE `table` 
SET `status` = 1 
WHERE type = ... AND user_id = ... AND status = 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы