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即可。