pezdatskiy
@pezdatskiy
Предприниматель, по выходным- программист

Некорректно работает GROUP BY во VIEW MYSQl. Лыжи не едут?

Имеем:
таблица со статусами лидов lsu ,допустим
update_id | lead_id | status_id | update
1              | 100       |     1        | 14555555
2              | 100       |     2        | 14555556


Имеем VIEW lsu_desc, которая нам делает DESC
что нибудь типо
SELECT * FROM lsu ORDER by `update` DESC


Делаем еще один VIEW lsu_grouped чтобы получать последний статус
SELECT * FROM lsu_desc GROUP by `lead_id`


И на выходе не получаем,блин,последний статус. Получаем почему то первый
В то же время запрос
SELECT * FROM(SELECT * FROM lsu ORDER by `update` DESC) as inv GROUP by `lead_id`

работает корректно.
КАК ЖЕ ТАК ТО блин???

проект большой, тут не пишу всех join которые в реальных запросах
Мне нужны view для сущностей типо lead, чтобы не писать каждый раз в контроллерах запросы.

Что с mysql не так? Почему такая обработка из представления, а главное- что делать?
И именно когда из VIEW подтягиваешь. Если делать SELECT FROM SELECT таких проблем нет(
Прувы
5ba7821167b51628582384.png5ba782161e2ee979471354.png
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
pezdatskiy
@pezdatskiy Автор вопроса
Предприниматель, по выходным- программист
Спасибо хабру,нашел(
Если в определении представления есть конструкция ORDER BY, то она будет работать только в случае отсутствия во внешнем операторе SELECT, обращающемся к представлению, собственного условия сортировки. При наличии конструкции ORDER BY во внешнем операторе сортировка, имеющаяся в определении представления, будет проигнорирована.

Тем не менее,какой механизм реализации посоветовали бы? Тригер на апдейт статуса в основной таблице?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
По стандарту SQL группировка GROUP BY вообще не должна работать с полями, не включёнными в саму группировку или в агрегатные функции. То, что старые версии MySQL такое допускают - это особенность именно MySQL. В новых версиях с настройкой по умолчанию ваши запросы будут выдавать ошибки.
Кроме того, в таблицах SQL нет понятия "первой" или "последней" строки. Есть строки с меньшим или большим значением какого-либо поля. Чтобы получить то, что вы хотите, надо делать запрос вида
SELECT что_нужно_выбрать
  FROM таблица
  WHERE условие_выбора
  ORDER BY поля_определяющее_порядок DESC
  LIMIT 1
Ответ написан
Ваш ответ на вопрос

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

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