簡體   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