如何在所需行之前查找总行数

时间:2014-04-28 01:28:58

标签: php mysql sql

我有一个基于文本的黑手党游戏,我被选中了一些GameRecords。游戏记录都在"用户"中定义。表。对于这个例子,我使用" totalcrimes"。我需要从users表中选择所有行并按totalcrimes排序,然后找出每个特定用户正在查看页面的行。

如果我是"排名" 30日它会回响#34; 30"。我用来查找前5名的代码在这里我需要扩展它:

<?php
$i = 0;
$FindCrimes = mysql_query("SELECT * FROM players WHERE status='Alive' AND robot = 0 ORDER BY `totalcrimes` DESC LIMIT 5");
while($Row = mysql_fetch_assoc($FindCrimes)){
    $Username = $Row['playername'];
    $TotalCrimes = number_format($Row['totalcrimes']);
    $i++;
        echo "
        <tr>
            <td bgcolor='#111111' width='5%'>$i</td>
            <td bgcolor='#111111' width='50%'><a href='viewplayer?playerid=$Username'>$Username</a></td>
            <td bgcolor='#333333' width='45%'>$TotalCrimes</a></td></td>
        </tr>
        ";
    } 
?>

2 个答案:

答案 0 :(得分:0)

我将假设您已经设置了一个变量来保存当前用户ID号和总罪行,因此在这种情况下,我将使用$user作为我的变量。

改变你的健康状况。

现在,我看到2个实例,你的意思是你的帖子不是很具体,所以我会解决这两个问题。

要显示页面顶部的数字,您可以使用类似的内容

<?php
$sql   = "SELECT * FROM `players` WHERE `totalcrimes` > '{$user['totalcrimes']}'";
$run   = mysql_query($sql);
$rank  = mysql_num_rows($run) + 1;
echo 'Your rank: ' . $rank;

除此之外,我发现它可能被用来突出你的行,所以这样就足够了;

<?php
$i = 0;
$FindCrimes = mysql_query("SELECT * FROM players WHERE status='Alive' AND robot = 0 ORDER BY `totalcrimes` DESC LIMIT 5");
while($Row  = mysql_fetch_assoc($FindCrimes)) 
{
    $Username    = $Row['playername'];
    $TotalCrimes = number_format($Row['totalcrimes']);
    $i++;

    $primary   = '#111111';
    $secondary = '#333333';

    if ($Row['id'] == $user['id']) 
    {
        $primary   = '#222222';
        $secondary = '#444444';
    }

    echo "<tr>
        <td bgcolor='$primary' width='5%'>$i</td>
        <td bgcolor='$primary' width='50%'><a href='viewplayer?playerid=$Username'>$Username</a></td>
        <td bgcolor='$secondary' width='45%'>$TotalCrimes</a></td></td>
    </tr>";
} 

如果这些都没有提出您的要求,请发表评论,我会编辑以适应。

edit:我已经在游戏上工作了几年 - 小心分享与你的游戏的链接?

答案 1 :(得分:0)

这可以解决问题

SELECT COUNT(*)+1 as rank 
FROM users
WHERE totalcrimes > (SELECT totalcrimes 
                     FROM users 
                     WHERE user_id='12345' AND status='Alive' AND robot='0');

因此,它会计算所有行totalcrimes比所选用户更多的行(在此示例中,我使用了user_id列和一些id 12345),而不是在该总和上添加1并返回为rank值。

当然,修改括号内的WHERE子句以使其适用于您。

我认为表名是users,用户ID是整数user_id

测试预览(Navicat Premium):

enter image description here

此查询的作用是什么?它会从rankusers中返回选定行数+ 1作为totalcrimes列,其中totalcrimes大于{{}一些用户的1}}该用户的全部资源由另一个查询(由其user_id)选择。如果您有多个具有相同totalcrimes值的用户,则此查询将为所有用户返回相同的排名。