这个sql问题的最佳解决方案

时间:2011-08-15 20:13:24

标签: php sql

我的头文件中有以下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并发布结果?或者有更好的方法吗?

2 个答案:

答案 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(*)