2011-08-27 11 views
3

안녕하세요 여기 내가MySQL SELECT 열 COUNT (이름) WHERE 조건 GROUP BY 열?

$sql = "SELECT number, COUNT(name) FROM people WHERE id='$id' GROUP BY number"; 
$result = mysql_query($sql); 

while($row = mysql_fetch_array($result)){ 
$statarray['stat'.$i] = $row['COUNT(name)']; 
$i++; } 

수의 열 저장 0, 1, 2 또는 배열이 다시 각 번호에 대해 얼마나 많은 이름이 총 온다 있도록 각각의 이름에 대하여 3를 사용하고있는 SQL 문입니다 .. 잘 작동합니다.

유일한 문제는 모든 이름에 대해 저장된 숫자가 1 인 경우 내 배열 항목 'stat0'은 1의 숫자로 바뀌기 때문에 0이 몇 개인 지 알려주지 않습니다. 배열에 0이 없으므로 첫 번째 출력은 1입니다.)

사전에 감사하는 시간이 없을 때를 포함하여 숫자 열에 1s 2s 및 3s가 얼마나 많은 이름이 있는지 어떻게 알 수 있습니까?

답변

3
SELECT numbers.number , 
     COUNT(name) 
FROM (SELECT 0 AS number 
      UNION ALL 
      SELECT 1 
      UNION ALL 
      SELECT 2 
      UNION ALL 
      SELECT 3 
     ) numbers 
     LEFT JOIN people ON people.number = numbers.number AND id='$id' 
GROUP BY numbers.number 

또는 댓글

SELECT numbers.number , 
     COUNT(name) 
FROM numbers 
     LEFT JOIN people ON people.number = numbers.number 
          AND id = '$id' 
WHERE numbers.number BETWEEN 0 AND 3 
GROUP BY numbers.number 
+0

감사 마틴에 따라 영구 번호 테이블이있는 경우, 당신은겠습니까 너무 친절로이 어떻게 작동하는지 설명하기 위해? – Wez

+0

데이터에 존재하는 값만 선택할 수 있습니다. 이렇게하면 모든 값이있는 인라인 파생 테이블이 만들어집니다 (영구 보조 숫자 테이블은 유용하고 더 효율적일 수 있습니다). 왼쪽 조인은 오른쪽 입력에 일치 항목이 없더라도 왼쪽 입력의 모든 값을 유지합니다. –

+0

그렇다면 내 번호를 보유하고있는 AUX/참조 테이블을 가지고 있다면 인라인 테이블을 만드는 대신이 SELECT에 참여할 수 있습니까? 이것이이 진술을 어떻게 바꿀 것입니까? – Wez