我有以下sql查询在我的头文件:
// This query is getting points scored by user1, this number changes
// each time user scores more points
$query_points = mysql_query("SELECT * FROM quiz WHERE `sender` = user1 AND points= '1'");
$points = mysql_num_rows($query_points);
现在,如果有3个或更多的用户登录,我如何比较他们的个人积分,如果我想?
我是否要像这样写3遍这个sql查询:
$query_points = mysql_query("SELECT * FROM quiz WHERE `sender` = user1 AND points= '1'");
$points1 = mysql_num_rows($query_points);
$query_points = mysql_query("SELECT * FROM quiz WHERE `sender` = user2 AND points= '1'");
$points2 = mysql_num_rows($query_points);
$query_points = mysql_query("SELECT * FROM quiz WHERE `sender` = user3 AND points= '1'");
$points3 = mysql_num_rows($query_points);
比较$points1, $points2和$points3和post结果?还是有更好的方法?
使用COUNT, GROUP BY, ORDER BY和LIMIT:
SELECT sender
FROM quiz
WHERE points = 1
GROUP BY sender
ORDER BY COUNT(*) DESC
LIMIT 3
它将选择得分最高的前三个发送者。
顺便说一下,如果你只需要行数,不要做SELECT *
查询,而使用mysql_num_rows。相反,只需执行SELECT COUNT(*)
查询。
使用组by返回一次查询中用户的计数。
select sender, count(case when points = 1 then 1 end)
from quiz
where sender IN ('user1', 'user2', 'user3')
group by sender
order by count(*)