Size: a a a

2020 April 24

А

Александр in ru_mysql
Grigori Kochanov
у тебя LIMIT 20
Лимит уже после группировки работает
источник

GK

Grigori Kochanov in ru_mysql
Александр
Лимит уже после группировки работает
спасибо, КО
источник

А

Александр in ru_mysql
какой вопрос такой и ответ
источник

GK

Grigori Kochanov in ru_mysql
Alexey
ок, еще раз:
есть таблица comments с данными типа
id|comment|item_id
нужно взять 20 последних записей с разными item_id
20 последних записей с любыми разными item_id?
источник

GK

Grigori Kochanov in ru_mysql
судя по MAX(id) - задача взять  последние комментарии пользователей
источник

A

Alexey in ru_mysql
20 последних коментариев (максимальный ИД) к разным товарам
источник

A

Alexey in ru_mysql
да
источник

GK

Grigori Kochanov in ru_mysql
это просто иначе решается
источник

A

Alexey in ru_mysql
Grigori Kochanov
это просто иначе решается
как?
источник

GK

Grigori Kochanov in ru_mysql
лучше всего - добавить таблицу-связь item_last_comment (item_id int, comment_id int)
источник

А

Александр in ru_mysql
я написал правильный запрос, он полностью соответвует поставленной задаче, но он будет долгий и лопатить всю таблицу
WITH d AS (
 SELECT 1 id, 'comment10' comment, 1 item_id
 UNION ALL SELECT 2, 'comment1', 1 val
 UNION ALL SELECT 3, 'comment3', 2 val
 UNION ALL SELECT 4, 'comment4', 2 val
)
, t AS (
 SELECT id, comment, item_id
 , ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY id DESC) rn
 FROM d
)
SELECT id, comment, item_id
FROM t
WHERE rn = 1
ORDER BY id DESC
LIMIT 20

можно его оптимизировать используя рекурсию
источник

GK

Grigori Kochanov in ru_mysql
а можно не пытаться изобрести способ есть суп вилкой, и взять ложку
источник

А

Александр in ru_mysql
ну запрос это всё таки проще, чем вводить денормализацию, вещать триггеры
источник

GK

Grigori Kochanov in ru_mysql
это не денормализация, это правильная нормальная форма связи один к одному
источник

GK

Grigori Kochanov in ru_mysql
как вариант - материализованный вид или колонка в items, вот это уже денормализация
источник

E

Eugene in ru_mysql
а можно проставить правильные индексы в нужном порядке и запрос будет выполняться очень быстро
источник

А

Александр in ru_mysql
last_comment - это чистейшей воды денормализация
источник

А

Александр in ru_mysql
Eugene
а можно проставить правильные индексы в нужном порядке и запрос будет выполняться очень быстро
тут это не пройдёт
источник

GK

Grigori Kochanov in ru_mysql
Eugene
а можно проставить правильные индексы в нужном порядке и запрос будет выполняться очень быстро
тут группировка по всей выборке с большим количеством записей
в pg можно было бы сделать оконную функцию
источник

A

Alexey in ru_mysql
Eugene
а можно проставить правильные индексы в нужном порядке и запрос будет выполняться очень быстро
так подскажите как?
источник