2012-03-04 2 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. 나는 '트윗'이 무엇이 잘못되었는지

을 알아낼 수 없습니다 ..

을 ** UPDATE ** 나는 그것을 자신을 가지고 생각 : 이것은 단지 1을 출력한다

$sql = "SELECT DISTINCT authentication.*, 
      (SELECT COUNT(*) FROM freelanceFeedback 
      WHERE FK_freelanceWinnerUserId=userId 
      ) as taskscount 
      FROM authentication 
      WHERE `FK_freelanceProvider`=$what 
      ORDER BY taskscount DESC"; 

사용자 및 주문 금액을 피드백 금액으로 표시합니다. 당신이 (어쨌든 나쁜 관행입니다) SELECT *를 수행하지 않는 경우

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 

그러나,이 경우에만 작동합니다 : 당신은 COUNT()를 사용하는 경우

+1

샘플 표를 제공해주십시오. 나는 당신이 GROUP BY를 사용해야한다고 믿지만 샘플 데이터가없는 정확한 쿼리를 만드는 것은 어렵다. – mkk

+0

당신이 할 수있는 경우에는 * 사용하지 마라. 때때로 성능이 좋지 않고 항상 가독성이 나쁘다. 원하는 열을 지정하고 COUNTING하는 경우 테이블 ID 만 사용하십시오. –

답변

1

은 또한에 의해 그룹을 사용해야합니다. COUNT 비트가 아닌 모든 것은 GROUP BY로 들어가야합니다. 여기에 텍스트 필드가 포함되어 있으면이를 수행 할 수 없으므로 하위 쿼리에 JOIN을 수행해야합니다. 그렇게하지 않으면 MySQL은 불평하지 않습니다하지만 할 수 심각하게 느린 일을 다른 DB를 그렇게 가장 잘 그것을 할 오류가 발생합니다 : 어떤 테이블 FK_freelanceProvider 지금의 일부입니다

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 

을 그것은 분명하지 않다 인증이라고 생각했습니다.