我有疑问:
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 feb
3)114 - 最新消息24 feb
4)117 - 最后的新闻9 feb
5)120 - 最新消息23日元
6)123 - 最新消息24日元
7)126 - 最新消息23日元
8)129 - 最后的新闻9 feb
9)132 - 最新消息22 feb
为什么?
答案 0 :(得分: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;