2013-03-26 90 views
1

我有一个名为categories的表和名为posts的表。每篇文章都有日期,标题,ID和catID。我怎样才能做一个查询返回按日期排序的每个cateogry的第一篇文章。SQL Group按日期排列并显示每个类别

例子:

Post_ID 1 "Title 1" "Cat1" "26-03.2013 13:00" 
Post_ID 2 "Title 2" "Cat1" "26-03.2013 13:05" 
Post_ID 3 "Title 3" "Cat1" "25-03.2013 13:00" 
Post_ID 4 "Title 4" "Cat1" "25-03.2013 13:05" 


Post_ID 5 "Title 5" "Cat2" "26-03.2013 14:00" 
Post_ID 6 "Title 6" "Cat2" "26-03.2013 14:05" 
Post_ID 7 "Title 7" "Cat2" "25-03.2013 14:00" 
Post_ID 8 "Title 8" "Cat2" "25-03.2013 14:05" 

Post_ID 9 "Title 9" "Cat3" "26-03.2013 15:00" 
Post_ID 10 "Title 10" "Cat3" "26-03.2013 15:05" 
Post_ID 11 "Title 11" "Cat3" "25-03.2013 15:00" 
Post_ID 12 "Title 12" "Cat3" "25-03.2013 15:05" 

其结果将是:

26-03-2013 
Post ID10 (15:05) CAT 3 
POST ID8 (14:05) CAT 2 
POST ID4 (13:05) CAT 1 


25-03-2013 
Post ID12 (15:05) CAT 3 
POST ID6 (14:05) CAT 2 
POST ID2 (13:05) CAT 1 
+0

这个问题每天都会在SO上被提出一百次 - 以及在专门的MySQL论坛上。哦,它也包含在手册中。 – Strawberry 2013-03-26 10:52:13

+0

@Strawberry你能给我一个链接吗?在问一个问题之前,我总是寻找一个解决方案,但是这次我真的找不到一个问题。 – 2013-03-26 10:59:01

+0

寻找群组最大值。有各种解决方案,但不相关的子查询通常是最快的 – Strawberry 2013-03-26 11:53:18

回答

0

尝试此查询,

$query ='SELECT categories.*, posts.* FROM categories, posts WHERE categories.id = posts.catID GROUP BY posts.catID ORDER BY posts.date DESC'; 

阅读JOIN:http://dev.mysql.com/doc/refman/5.0/en/join.html

阅读有关GR OUP BY:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

阅读有关ORDER BY:http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

这可能帮助你。

+0

@TudorRavoiu,编辑答案。 – 2013-03-26 09:51:23

+0

它们按类别返回,但它们在日期上不分片。因此,一个类别的帖子仅在第一天显示,而不显示在以下帖子中。 – 2013-03-26 10:07:57

+0

@TudorRavoiu回答编辑。 – 2013-03-26 10:15:39