首先,抱歉,我现在对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
我希望你能理解这个问题。
提前感谢您的帮助
最好的问候
答案 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
中的SUM(meta.page_num) as whateverNameYouLike
对page_num求和
注意:上面的查询假设id
表中的wp_posts
对于最新日期来说是最大的,如果不是这种情况,则必须抓住{{} 1}}和max(date)
组合并以这种方式查找最新条目。哪个不应该太复杂。
我还添加了一个没有孩子的条目162来测试没有孩子的帖子的情况。这就是为什么page_num的总和是18而不是17。