Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在所需行之前查找总行_Php_Mysql_Sql - Fatal编程技术网

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

Php 如何在所需行之前查找总行,php,mysql,sql,Php,Mysql,Sql,我有一个基于文本的黑手党游戏,我选择了一些游戏记录。游戏记录都在“用户”表中定义。在这个例子中,我使用的是“totalcrimes”。我需要从users表中选择所有行并按totalcrimes排序,然后找出每个特定用户正在查看页面的行 如果我是“排名”第30的用户,它会回应“30”。我用来查找前5名的代码在这里,但我需要对其进行扩展: <?php $i = 0; $FindCrimes = mysql_query("SELECT * FROM players WHERE status='A

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

如果我是“排名”第30的用户,它会回应“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>
        ";
    } 
?>

我假设您已经设置了一个变量来保存当前用户ID号和犯罪总数,因此在本例中,我将使用
$user
作为变量

把你的衣服换成合适的

现在,我看到了两个例子,你的意思是,因为你的帖子不是很具体,所以我将讨论这两个问题

要在页面顶部显示数字,可以使用以下命令:

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

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\u id
列和一些id
12345
)的行进行计数,然后在该总和上加1,并作为
rank
值返回

当然,修改括号内的
WHERE
子句,使其适合您

我假设表名是
users
,用户id是integer
user\u id

测试预览(Navicat Premium):


此查询的作用是什么?它从
users
表返回所选行数+1作为
rank
列,其中
totalcrimes
大于某个用户的
totalcrimes
。该用户的totalcrimes由另一个查询选择(通过其
用户id
)。如果您有多个用户具有相同的
totalcrimes
值,则此查询将为所有用户返回相同的排名。

@johncode-我查看了您认为这是重复的帖子,我不认为这是因为这会回应所有排名在他们旁边的用户,我需要从一个特定的点回显1行。嗨,卢克,谢谢你的回复,我现在将尝试这些解决方案,我的网站链接是:目前在测试中,而我正在准备新功能ETCI,gRPG?另外:
您没有向管理员发送消息的权限-嘘!感谢您的帮助,我现在将对此进行测试:)这样,在运行此查询之前,您不需要该用户的
totalcrimes
列的值。
SELECT COUNT(*)+1 as rank 
FROM users
WHERE totalcrimes > (SELECT totalcrimes 
                     FROM users 
                     WHERE user_id='12345' AND status='Alive' AND robot='0');