SQL GROUP BY和ORDER BY无法正常工作

问题描述 投票:0回答:1

我有疑问:

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表:有多个记录,这是新闻的类别。 news:这是新闻报道。

我想通过date_show新闻列来订购,但是由于工作不正常而被分组。我没有正确的订单,而不是date_show的新闻。

我进入表my_project ORDER BY ID DESC为什么?:

1)108 - 最新消息25二月 2)111 - 最新消息24二月 3)114 - 最新消息24日 4)117 - 最新消息9 feb 5)120 - 最新消息23日 6)123 - 最新消息24日 7)126 - 最新消息23二月 8)129 - 最后的新闻9 feb 9)132 - 最新消息22二月

为什么??

php mysql
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;
© www.soinside.com 2019 - 2024. All rights reserved.