在两个表上使用JOIN的mySQL COUNT

时间:2014-05-10 21:20:47

标签: php mysql sql join count

首先,抱歉,我现在对mySQL并不擅长。

我有两张桌子:

post_meta

id | post_id | page_num
4  | 161     | 14
3  | 160     | 9
2  | 159     | 3
1  | 158     | 16

wp_posts

id  | date                 | parent_id
161 | 2013-08-28 13:53:48  | 160
160 | 2013-07-28 13:53:48  | 0
159 | 2013-04-28 13:53:48  | 158
158 | 2013-02-28 13:53:48  | 0

我想知道日期为2013年的帖子的所有page_nums的总和。问题是1个帖子有几个其他帖子从父帖子获得了parent_id。

在这个例子中,id 160是wp_posts中的父帖子,并且得到了一个id为16的子帖子。但它是同一个帖子。

来自post_meta的page_num从每个帖子获得了post_id,即使它是一个孩子。在这种情况下,它将是post_meta中的id 4和2,因为这是父帖160和159的最新保存。

所以我只需要总结一下最新(最新)儿童帖子的page_nums

我(非常糟糕)尝试到目前为止:

COUNT pagenum FROM wp_postmeta a WHERE wp_postmeta b post_id.b = parent_id.a AND DATE LIKE='2014' GROUP BY parent_id.b

我希望你能理解这个问题。

提前感谢您的帮助

最好的问候

1 个答案:

答案 0 :(得分:1)

如果您只有一个级别的子/父关系,您可以使用以下内容来抓住1)没有孩子的父母和2)每个父母使用小组的最新子女

SELECT meta.*
FROM post_meta meta
INNER JOIN
(SELECT parent.id FROM wp_posts parent      -- parent without child
 WHERE YEAR(date) = 2013 
      AND parent_id = 0 
      AND NOT EXISTS (SELECT 1 FROM wp_posts child
                  WHERE child.parent_id = parent.id)
 UNION
 SELECT max(id) FROM wp_posts               -- latest child
 WHERE YEAR(date) = 2013
 AND parent_id > 0
 GROUP BY parent_id
 )posts
ON posts.id = meta.post_id

sqlFiddle

然后,您可以使用此sqlFiddle

中的SUM(meta.page_num) as whateverNameYouLike对page_num求和

注意:上面的查询假设id表中的wp_posts对于最新日期来说是最大的,如果不是这种情况,则必须抓住{{} 1}}和max(date)组合并以这种方式查找最新条目。哪个不应该太复杂。

我还添加了一个没有孩子的条目162来测试没有孩子的帖子的情况。这就是为什么page_num的总和是18而不是17。