MySQL-依赖连接

MySQL-依赖连接,mysql,Mysql,我试着按数量计算自由撰稿人的反馈和订单,如下所示: $sql = "SELECT authentication.*, (SELECT COUNT(*) FROM freelanceFeedback) as taskscount FROM authentication LEFT JOIN freelanceFeedback ON authentication.userId=freelanceFeedback.FK_freelanceWinnerUse

我试着按数量计算自由撰稿人的反馈和订单,如下所示:

$sql = "SELECT authentication.*, (SELECT COUNT(*) FROM freelanceFeedback) as taskscount FROM authentication
            LEFT JOIN freelanceFeedback
            ON authentication.userId=freelanceFeedback.FK_freelanceWinnerUserId
            WHERE `FK_freelanceProvider`=$what
            ORDER BY taskscount DESC";
但是如果用户有多个反馈,并且不是由TaskScont排序,那么我有多个输出

我想不出“推特”到底是怎么回事

**更新** 我想我自己也有:

$sql = "SELECT DISTINCT authentication.*, 
            (SELECT COUNT(*) FROM freelanceFeedback
            WHERE FK_freelanceWinnerUserId=userId
            ) as taskscount 
            FROM authentication
            WHERE `FK_freelanceProvider`=$what
            ORDER BY taskscount DESC";
这仅输出1个用户并按反馈量排序。

使用COUNT()时,还需要使用GROUP by:

    SELECT authentication.userId, 
           COUNT(freelanceFeedback.id) AS taskscount 
      FROM authentication
 LEFT JOIN freelanceFeedback
        ON authentication.userId = freelanceFeedback.FK_freelanceWinnerUserId
     WHERE `FK_freelanceProvider`= $what
  GROUP BY authentication.userId
  ORDER BY taskscount DESC
但是,只有在不执行SELECT*(无论如何这是一种糟糕的做法)的情况下,这才有效。所有不在计数位的内容都需要分组。如果其中包含文本字段,则无法执行此操作,因此需要对子查询进行联接。如果您不这样做,MySQL不会抱怨,但它会严重减慢速度,其他DBs会抛出错误,因此最好正确操作:

    SELECT authentication.userId, 
           authentication.textfield, 
           authentication.othertextfield,
           subquery.taskscount
      FROM authentication
 LEFT JOIN (SELECT freelanceFeedback.FK_freelanceWinnerUserId,
                   COUNT(freelanceFeedback.FK_freelanceWinnerUserId) AS taskscount 
              FROM freelanceFeedback
          GROUP BY FK_freelanceWinnerUserId) AS subquery
        ON authentication.userId = subquery.FK_freelanceWinnerUserId
     WHERE authentication.FK_freelanceProvider = $what
  ORDER BY subquery.taskscount DESC

不清楚FK_提供程序是哪个表的一部分,因此我假设它是身份验证。

请提供一个示例表。我认为您应该使用GROUPBY,但如果没有样本数据,则很难进行准确的查询。如果可以,请避免使用*有时会影响性能,但始终会影响可读性。说明所需的列,如果正在计数,只需使用表id即可。