Как я могу получить все затронутые идентификаторы строки в группе MySQL по предложению? - PullRequest
0 голосов
/ 01 ноября 2019

Я делаю выбор, используя GROUP BY, поэтому я получаю много разных строк. Мне нужно ОБНОВИТЬ поле состояния каждой строки, затронутой запросом SELECT, но оно сгруппировано ... поэтому я не знаю все идентификаторы, только МАКС (идентификатор).

Этозапрос на выборку:

    SELECT d.*, n.* FROM
    (SELECT MAX(id) as id, MAX(datetime) as datetime, COUNT(DISTINCT content) as total FROM user_notifications 
    WHERE id_user
    GROUP BY id_ref, type
    ORDER BY datetime DESC) d
    JOIN user_notifications n USING (id)

Изменить:

Простой пример, это таблица

id  user    content status
1   1       aaa     0
2   1       aaa     0
3   1       bbb     0
4   2       aaa     0
5   3       bbb     0

Это запрос

select max(id), user, content from table where user=1 group by content

это результат

id  user    content
2   1       aaa
3   1       bbb

в этом запросе, на самом деле sql внутренне выбирает все user = 1 (id = 1, 2, 3), а затем запрос группируется, показывая только две строки.

Итак, я хочу обновить все идентификаторы, вовлеченные в запрос (id = 1, 2 и 3)

1 Ответ

0 голосов
/ 01 ноября 2019

Исходя из вашего примера, вам нужен результат, точный для этого запроса:

select id from `table` where user = 1; 

Но, используя указанный вами запрос, какие группы записывают записи по содержимому

select max(id), user, content from `table` where user = 1 group by content

Итак, вВ таком случае вы можете объединить ту же таблицу с производной таблицей:

select id from `table` as t
join (select max(id), user, content from `table` where user = 1 group by content) as dt 
on dt.content = t.content and dt.user = t.user;

Этот запрос теперь эквивалентен первому прямому запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...