我有一个包含用户ID,名称,体育和积分的数据库( GAMES )。
user1 ,足球,10分 - user1 ,篮球,5分
user2 ,足球,8分 - user2 ,Baketball,3分
要获得 每个用户 的每个用户的排名,我使用的是以下完美的代码:
$sql = "SELECT
sports,
FIND_IN_SET(footbal, (
SELECT GROUP_CONCAT(sports
ORDER BY points DESC)
FROM ".GAMES."
)
) AS rank
FROM ".GAMES."
WHERE userid = 1
";
结果:
user1 (1)(1为排名)
当我在WHERE中使用user2时,我得到: user2 (2)
现在我想要一个这样的列表(超过1000个用户):
1- User1 (1)
2- User2 (2)
3- User15 (44)
3- ....
任何帮助将不胜感激。我需要更多解释,请问。
答案 0 :(得分:1)
我会做这样的事情:
$sqls = array();
foreach ($sports as $sport) {
$sqls[] = "SELECT name FROM ".GAME." WHERE sports='".$sport."' ORDER BY points ASC"
}
然后循环执行slqs变量以获取所有列表。
最后,为了得到括号部分,我会在打印列表时这样做。
答案 1 :(得分:0)
这不会起作用吗?
"SELECT * FROM GAMES WHERE userid = ".$userid." ORDER BY points DESC"
我不知道为什么你需要使用其他任何东西,因为你只是按他们的观点排序。
或者如果您还想指定一项运动,
"SELECT * FROM GAMES WHERE userid = ".$userid." AND sports = '".$sport"' ORDER BY points DESC"
您需要使用数组循环遍历每项运动,然后再次使用上述查询。 e.g。
$ranks = mysql_query("SELECT * FROM GAMES WHERE userid = ".$userid." AND sports = '".$sport"' ORDER BY points DESC", $database);
$count = 1;
while(list($userid, $name, $sport, $points) = mysql_fetch_row($ranks)) {
//formatting here. table row, paragraph etc or:
echo "$count - $name ($userid)";
$count++;
}
答案 2 :(得分:0)
你可以选择这样的一个:
$sql = 'SELECT * from table_GAMES WHERE points >= 1000 ORDER BY name'
结果将按字母顺序排序所有大于或等于1000的用户。然后你可以这样显示它:
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
echo $row['name'];
echo ' (' . $row['points'] . ')';
}
答案 3 :(得分:0)
MySQL并没有以一种方便的方式实现排名。例如,这里讨论了这一点:ROW_NUMBER() in MySQL
在上面链接的那个帖子中,您可以看到一些可以尝试的解决方案,或者您可以使用一些更简单的SQL来获取有序列表并使用PHP来计算/计算排名:
// ...
$sql = 'SELECT userid, sports, SUM(points) AS total_points FROM games GROUP BY userid, sports ORDER BY sports, SUM(points) DESC';
$result = $mysqli->query($sql);
$rank = null;
$last_sport = null;
$sports_ranking = array();
while($row = $result->fetch_object()) {
if($row->sports == $last_sport) {
$rank++;
} else {
$rank = 1;
}
$sports_ranking[$row->sports][] = array(
'userid' => $row->userid,
'rank' => $rank,
'total_points' => $row->total_points
);
}
echo('<pre>'); print_r($sports_ranking); echo('</pre>');
// ...