2014-07-11 4 views
0

기본적으로 내가 가진 것은 등급 시스템입니다. 4 개의 카테고리에 대해 1-5 개의 별. 제가하려는 것은 각 카테고리에 대한 결과를 세는 것입니다. 예를 들어 :MySQL 쿼리에서 여러 결과 계산

Category 1: 20 1 star, 32 2 star, 40 3 star, 35 4 star, 19 5 star 
    ... 
    Category 4: 10 1 star, 12 2 star, 45 3 star, 54 4 star, 2 5 star 

나는 20 개 쿼리를, (SELECT COUNT(*) WHERE BizID=$id AND category1=1/SELECT COUNT(*) WHERE BizID=$id AND category1=2 ...) 단지를 할 수 있다는 것을 알고 있지만, 좀 더 효율적인 방법이 있다면 궁금 해서요. 내가 많은 수의 히트를 기록했거나 많은 수의 평점이있는 것처럼 보였으면이 시점에서 스크립트가 상당히 나 빠질 것입니다. 어떤 도움을 주시면 감사하겠습니다.

Table Structure 
RateID - int(10) 
UserID - varchar(8) 
BizID - varchar(8) 
Cat1 - int(1) 
Cat2 - int(1) 
Cat3 - int(1) 
Cat4 - int(1) 
Date - int(10) 
+0

'IN을 '이것 때문에. – prava

답변

1

당신은 종류와 CASE 문을 사용하여 한 번에 스타 평가에 의해 수를 얻을 수 있습니다, 아래 :

SELECT 
    SUM 
    (
     CASE 
      WHEN Cat1 = 1 THEN 1 
      ELSE 0 
     END 
    ) Cat1_1, 
    SUM 
    (
     CASE 
      WHEN Cat1 = 2 THEN 1 
      ELSE 0 
     END 
    ) Cat1_2, 
    SUM 
    (
     CASE 
      WHEN Cat1 = 3 THEN 1 
      ELSE 0 
     END 
    ) Cat1_3, 
    SUM 
    (
     CASE 
      WHEN Cat1 = 4 THEN 1 
      ELSE 0 
     END 
    ) Cat1_4, 
    SUM 
    (
     CASE 
      WHEN Cat1 = 5 THEN 1 
      ELSE 0 
     END 
    ) Cat1_5, 
    SUM 
    (
     CASE 
      WHEN Cat2 = 1 THEN 1 
      ELSE 0 
     END 
    ) Cat2_1, 
... 
... 
... 
FROM mytable 
WHERE BizID=$id; 
사용할 수
0

이 함께보십시오 :

<?php 
$sql = "SELECT COUNT(BizID) WHERE BizID = " . $id . " AND category1 IN (1, 2, 3, 4, ...)"; 
+1

나는 너의 실종을 생각한다. – LinkinTED

+0

@LinkinTED, 이해하지 못한다. 자세한 내용을 적어주세요. – prava

+0

질문은 그것을하는 방법이 아니라 그것을하는 방법 * 더 나은 *. –

관련 문제