回答

收藏

如何从表中添加一个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 注:然而,最有可能是更优雅的解决方案!!!!
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则