排名列表包含所有用户

时间:2015-12-29 08:59:27

标签: php

我有一个包含用户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- ....

任何帮助将不胜感激。我需要更多解释,请问。

4 个答案:

答案 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>');
// ...