基本上我所拥有的是评级系统。 1-5星级4类。我想要做的是计算每个类别的结果。例如:
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 :(得分: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;
答案 1 :(得分:0)
试试这个:
<?php
$sql = "SELECT COUNT(BizID) WHERE BizID = " . $id . " AND category1 IN (1, 2, 3, 4, ...)";