SQL GROUP BY и ORDER BY не работают правильно

0

У меня есть запрос:

SELECT p.* FROM 'our_projects' AS p 
LEFT OUTER JOIN 'news_categories' nc ON p.sort = nc.categories_id 
LEFT OUTER JOIN 'news' n ON nc.news_id = n.id
GROUP BY p.id
ORDER BY n.date_show DESC

таблица our_projects: имеет 9 записей
news_categories table: есть несколько записей, это категории новостей.
news: это новость.

Я хочу упорядочить по столбцу новостей date_show, но группа работает неправильно. Я не правильно заказываю, а не по дате новостей.

Я получаю в таблице наш_проект ORDER BY ID DESC ПОЧЕМУ??:

1) 108 - последние новости 25 февраля
2) 111 - последние новости 24 февраля
3) 114 - последние новости 24 февраля
4) 117 - последние новости 9 февраля
5) 120 - последние новости 23 февраля
6) 123 - последние новости 24 февраля
7) 126 - последние новости 23 февраля
8) 129 - последние новости 9 февраля
9) 132 - последние новости 22 февраля

Зачем??

  • 0
    По какой причине вы решили использовать GROUP BY без каких-либо агрегатов (например, min / max / avg)?
  • 0
    Потому что, если я не использую GROUP BY, то я не получаю отдельных записей таблицы our_projects. Я получаю дубликаты
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Одно исправление для того, что вы хотите, - это присоединиться к подзапросу, который идентифицирует последнюю новость для каждой новой категории. В нижеприведенном запросе подзапрос с псевдонимом как t делает именно это. Он отфильтровывает все новости, за исключением последних по каждой категории.

SELECT p.*, nc.*, n.*
FROM our_projects p 
LEFT JOIN news_categories nc
    ON p.sort = nc.categories_id 
LEFT JOIN news n
    ON nc.news_id = n.id
INNER JOIN
(
    SELECT t1.categories_id, MAX(t2.date_show) AS max_date_show
    FROM news_categories t1
    INNER JOIN news t2
        ON t1.news_id = t2.id
    GROUP BY t1.categories_id
) t
    ON nc.categories_id = t.categories_id AND
       n.date_show      = t.max_date_show
GROUP BY
    p.id
ORDER BY
    n.date_show;
  • 0
    Нет, это не работает. Я получаю плохие записи заказа таблицы our_projects. Мне нужен заказ по n.date_show DESC.
  • 1
    Затем отредактируйте свой вопрос и покажите нам данные, которые объясняют проблему. На основании вашего комментария вы сказали, что хотите получать последние новости по категориям, и мой запрос делает это.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню