我的头文件中有以下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并发布结果?或者有更好的方法吗?
答案 0 :(得分:1)
使用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(*)
查询。
答案 1 :(得分:1)
使用group 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(*)