2012-03-04 24 views
0

我想算freelanceFeedback的秩序由計數是這樣的:MySQL的 - 指望一個加入

$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"; 

,但我有多個輸出,如果用戶有多個反饋,它不是由訂貨taskscount。

我想不出什麼「推特」是不對的..

**更新** 我想我找到了自己:

$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用戶和訂購的反饋量。

+1

請提供樣品表。我相信你應該使用GROUP BY,但是很難在沒有樣本數據的情況下進行精確查詢 – mkk 2012-03-04 18:25:20

+0

如果可以的話,請避免使用*有時對性能有害,並且始終對可讀性不好。陳述你想要的列,如果你是COUNTing,只需使用表ID。 – 2012-03-04 18:50:03

回答

1

當您使用COUNT(),你還需要使用GROUP BY:

​​

但是,如果你不是做SELECT *(這是不好的做法,反正)這隻會工作。所有不在COUNT位中的內容都需要進入GROUP BY。如果這包含文本字段,則無法執行此操作,因此您需要對子查詢執行JOIN操作。如果你不知道MySQL不會抱怨,但它可能會嚴重放慢改革的步伐和其他數據塊將拋出一個錯誤,所以最好是做正確的事:

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_freelanceProvider是如此一部分我假設它是身份驗證。