繁体   English   中英

在两个表上具有JOIN的MySQL COUNT

[英]mySQL COUNT with JOIN on two tables

首先,对不起,我现在的MySQL不好。

我有2张桌子:

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为161的子帖子。但这是同一篇文章。

来自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)没有子女的父母和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

然后,您可以使用SUM(meta.page_num) as whateverNameYouLikesqlFiddle中的whatNameLike之和来对page_num求和

注意:上面的查询假设wp_posts表中的id对于最新日期将是最大的,如果不是这种情况,则必须获取max(date)id组合并查找最新条目那样。 哪个不应该太复杂。

我还添加了一个没有孩子的条目162,以测试没有孩子的帖子的情况。 这就是page_num之和为18而不是17的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM