Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 使用MYSQL查询排名排行榜_Php_Mysql_Database_Codeigniter - Fatal编程技术网

Php 使用MYSQL查询排名排行榜

Php 使用MYSQL查询排名排行榜,php,mysql,database,codeigniter,Php,Mysql,Database,Codeigniter,我遇到了一个问题,我的逻辑不是很好,所以我试图通过只使用查询来做到这一点 我有一个数据列表,在那里我需要得到他们的排名,但问题是,我需要得到前两个比我高的,最后两个比我低的 比如说 id| name | score 1 bob 20 2 anna 10 3 jose 30 4 boni 30 5 lea 100 6 leo 10 7 qwertina 90 8 josh 50 9

我遇到了一个问题,我的逻辑不是很好,所以我试图通过只使用查询来做到这一点

我有一个数据列表,在那里我需要得到他们的排名,但问题是,我需要得到前两个比我高的,最后两个比我低的

比如说

id| name |   score
1   bob       20
2   anna      10
3   jose      30
4   boni      30
5   lea       100
6   leo       10
7   qwertina  90
8   josh      50
9   king      40
10  queen     10
假设我作为用户的id值是
7

因此,如果我登录并且我的id是
7

我需要得到

id| name |   score
5   lea       100
6   leo       10
7   qwertina  90
8   josh      50
9   king      40

这在mysql查询中可能吗?非常感谢您的帮助,我真的被这个问题困扰。

您似乎将您的逻辑建立在id的基础上,这很奇怪,但我们:

SELECT id, name, score
FROM yourTable
WHERE id BETWEEN yourId-2 AND yourId+2

不确定是否只有MySQL解决方案,但使用伪php代码

Grab records ordered by score
set a counter at 0
for loop starting 0, <= count of results
  if the id your id? 
    if the loop index < 3 ? // there aren't two people ahead of you
      return rows 0 to 4
    elseif the loop index > count -3 ? // you are one of the last
      return rows count -4 to count
    else
      return rows index -2 to index + 2  // you have 2 above and below you
按分数顺序抓取记录
将计数器设置为0

对于从0开始的循环,您好,先生,我很感谢您的回答,我仍在尝试了解这个想法,我可以问一下我应该在
yourID
中输入什么吗?如果我的id是7,我会将
放在7-2和7+2之间
?当然可以,并将“yourTable”替换为您的表名:)