【问题标题】:Two Left Joins and including a Count?两个左连接并包括一个计数?
【发布时间】:2020-12-11 19:18:38
【问题描述】:

我有以下查询,其中包括连接多个标签的左连接。此查询有效。

  SELECT
    ap.userid, 
    ap.audioid,      
    u.id
       (
        SELECT GROUP_CONCAT(t.tagname)
        FROM entitytag et
        LEFT JOIN tags t on t.tagid = et.tagid
        WHERE et.audioid = ap.audioid
    ) tagname
FROM audioposts ap 
LEFT JOIN users u ON u.id = ap.userid

但现在我想添加另一个左联接,它计算来自名为回复的表中对每个 ap.audioid 的回复数。有人知道如何添加这个额外的左连接吗?

这是用于计算从 GET 对指定 audioid 的回复的查询;

SELECT count('replyid') from replies WHERE opid = ?

但是如何将额外的左连接添加到第一个代码,以便我可以从回复表中获取每个 audioid 的回复计数?

【问题讨论】:

标签: mysql count left-join concat


【解决方案1】:

没有左连接,但阅读您的问题应该可行:

SELECT
    ap.userid, 
    ap.audioid,      
    u.id,
       (
        SELECT GROUP_CONCAT(t.tagname)
        FROM entitytag et
        LEFT JOIN tags t on t.tagid = et.tagid
        WHERE et.audioid = ap.audioid
    ) tagname,
    (
      select count('replyid') from replies WHERE opid = ap.audioid
    ) as count
FROM audioposts ap 
LEFT JOIN users u ON u.id = ap.userid

【讨论】:

  • 你确定应该是count('replyid')
  • count 确实进行了计数,问题是“计算回复的数量”,那么它可能有什么问题?
  • 你正在计算一个文字字符串
  • select count(*) from mytable;select count('42') from mytable 都产生相同的计数。
  • 如何使用不同的值,例如COUNT(1) 或如您所说的 COUNT(*) 以减少混乱?
猜你喜欢
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2016-07-08
  • 2015-12-28
相关资源
最近更新 更多