【问题标题】:Row counting a JOINed column without affecting the returned rows?在不影响返回行的情况下计算 JOINed 列的行数?
【发布时间】:2010-06-24 07:38:21
【问题描述】:

把我的问题写成简短的形式有点困难,所以如果标题没有意义,我深表歉意。

不管怎样,问题来了:

 $query = '
  SELECT issues.*, comments.author AS commentauthor, favorites.userid AS favorited FROM issues
  LEFT JOIN comments ON comments.issue = issues.id AND comments.when_posted = issues.when_updated
  LEFT JOIN favorites ON favorites.ticketid = issues.id AND favorites.userid = \'' . $_SESSION['uid'] . '\'
  ' . $whereclause . '
  ORDER BY issues.when_updated ' . $order;

不要介意它是 PHP,因为我 寻求 PHP 帮助。

查询检索到一堆issues,我想做的是获取favorites 的行数,其中favorites.ticketid 匹配issues.id。我使用LEFT JOIN favorites 不是为了得到我刚才提到的内容,而是为了获取客户是否喜欢这个问题,因此是favorites.userid AS favorited 部分。

我已尝试执行以下操作:(为了便于阅读,我一次将其以项目符号形式表示)

  • 复制现有的LEFT JOIN favorites 并从副本中删除用户 ID 检查
  • , COUNT(favorites.ticketid) AS favoritescount 添加到SELECT 部分
  • AS favorited 添加到原始LEFT JOIN 以及将favorites.userid 更改为favorited.userid

通过该尝试,我的查询最终只返回一行。

【问题讨论】:

    标签: mysql join count


    【解决方案1】:
    SELECT issues.*,
           comments.author AS commentauthor,
           favorites.userid AS favorited,
           (
               SELECT COUNT(favorites.id)
               FROM favorites
               WHERE ticketid = issues.id
           ) AS numfavorites
    FROM issues
    LEFT JOIN comments
        ON comments.issue = issues.id
        AND comments.when_posted = issues.when_updated
    LEFT JOIN favorites
        ON favorites.ticketid = issues.id
        AND favorites.userid = ?uid
    

    应该可以,我只是使用子查询来获取收藏夹的数量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      相关资源
      最近更新 更多