[英]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.