2013-02-22 76 views
0

我有那个基础:http://sqlfiddle.com/#!2/e5a24/2这是WordPress默认模式的简写。我剪掉了那个例子中不需要的字段。MySQL |选择特定的记录

正如你所看到的,在结果中我有两次“第一类”。我喜欢做的只是获得最新的“第一类”实例。

为SQL正确的结果如下:

POSTID POSTTITLE CATEGORYID CATEGORYNAME DATE 
-------------------------------------------------------------- 
2 2st Game 2 Category 2 January, 01 2013 00:00:00+0000 
3 1st Game 1 Category 1 January, 15 2013 00:00:00+0000 

我已经尝试了集团通过“类别ID”,但同时,我的成绩获得第1类只有一个实例,我年龄的增长一个,而不是属于“第1类”的最早期记录。

对此有任何想法,我该如何解决?

+0

你确定SQL小提琴正在处理查询权? – Miguelo 2013-02-22 18:06:34

回答

4
SELECT a.ID AS PostID, 
     a.post_title AS PostTitle, 
     c.meta_value AS CategoryID, 
     d.name AS CategoryName, 
     a.post_date AS Date 
FROM wp_posts a 
     INNER JOIN 
     (
      SELECT post_title, MAX(post_date) max_date 
      FROM wp_posts 
      GROUP BY post_title 
     ) b ON a.post_title = b.post_title AND 
       a.post_date = b.max_date 
     INNER JOIN wp_postmeta c 
      ON a.ID = c.post_ID 
     INNER JOIN wp_terms d 
      ON c.meta_value = d.term_ID 
WHERE c.meta_key = 'matchdayTeamsCategory' 
+1

这是假定帖子标题相同。为什么不分组职位类别? – 2013-02-22 17:58:34

+0

虽然在SQL小提琴工作正常,在我的真实数据,这是不正确的。在我的真实数据中,它只返回两条记录,而且似乎是通过PostTitle对我的结果进行分组。我不真的知道它有什么问题:(无论如何感谢@JW你的回应:) – 2013-02-22 18:04:07

2

你必须与你的小组使用MIN(日期)的

+0

你能举个例子吗? – 2013-02-22 17:34:18

+0

仅靠这一点可能仍会产生一些奇怪的结果,例如,在'postid'中,由于MySQL处理'GROUP BY'和'SELECT'中的额外列。 – 2013-02-22 17:35:17

+0

正确,最好的赌注看起来像是在其他答案中发布的内容。 – 2013-02-22 17:55:37

2

使用ORDER BY日期DESC得到 “1类” 最新

+1

不起作用;) – 2013-02-22 17:36:26