[英]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
然后,您可以使用SUM(meta.page_num) as whateverNameYouLike
此sqlFiddle中的whatNameLike之和来对page_num求和
注意:上面的查询假设wp_posts
表中的id
对于最新日期将是最大的,如果不是这种情况,则必须获取max(date)
和id
组合并查找最新条目那样。 哪个不应该太复杂。
我还添加了一个没有孩子的条目162,以测试没有孩子的帖子的情况。 这就是page_num之和为18而不是17的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.