如何从表中添加一个COUNT,然后通过另一个JOIN来影响该COUNT
技术问答
383 人阅读
|
0 人回复
|
2023-09-14
|
我有三表: U; `4 a$ [( ~$ v- h
Post
$ g6 O8 O2 _' s& P% @& y1 XID Name1 'Something'2 'Something else'3 'One more'Comment
" q* ]2 c) F" k3 z8 D) jID PostId ProfileID Comment 1 1 1 Hi my name is 2 2 2 I like cakes3 3 3 3 3 I hate cakes'Profile
J# f4 c- b$ n% ^ID Approved 1 1 3 11 我想计算发表评论的个人资料批准的帖子的评论) E6 ]) d: i# |2 P
我可以从Post然后从中选择数据Comment fine添加一个计数。但这个计数取决于配置文件是否被批准。# [! p. `( F) D7 O
我期待的结果是
+ `/ L1 n- u" _& k" o评论数
, _8 H9 X- a0 v' ?PostId Count 12 121212121212 4 l8 X4 Y v& f5 ~) @- h) @8 w8 A
解决方案: + G- ~# n4 ~; g8 x4 L
您可以这样选择嵌套:
0 h2 \$ U; A( D4 S3 H: M7 Q4 ~0 nSELECT Post.Id,temp.CountFROM PostLEFT JOIN(SELECT Post.Id,COUNT(Comment.ID) AS CountFROM PostLEFT JOIN Comment ON Comment.PostId = Post.IDLEFT JOIN Profile ON Profile.ID = Comment.ProfileIDWHERE Profile.Approved = 1GROUP BY Post.Id)temp ON temp.Id = Post.ID在没有帖子而不是没有记录的地方,这将使你成为null:
" M# C! F6 Q; B' m5 x0 h1 12 null3 1你可以用它来改善这一点。if来消除null
& h* d4 L0 j: V- H# a, q# e0 n; c( JSELECT Post.Id,if(temp.Count >= 1,temp.Count,0) as newCountFROM PostLEFT JOIN(SELECT Post.Id,COUNT(Comment.ID) AS CountFROM PostLEFT JOIN Comment ON Comment.PostId = Post.IDLEFT JOIN Profile ON Profile.ID = Comment.ProfileIDWHERE Profile.Approved = 1GROUP BY Post.Id) temp ON temp.Id = Post.ID这将给你你最初想要的:
9 x% g9 v* m( B1 z12 12 注:然而,最有可能是更优雅的解决方案!!!! |
|
|
|
|
|