Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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
Mysql 获取当前行以及下一个和上一个记录_Mysql - Fatal编程技术网

Mysql 获取当前行以及下一个和上一个记录

Mysql 获取当前行以及下一个和上一个记录,mysql,Mysql,我有一个查询,它将获取当前记录以及下一个和上一个记录。但我需要这样做,这样它就不必是下一个连续的ID select u.user_id, u.first_name, u.last_name, u.username, (select user_id -1 as user_id from users where user_id = u.user_id) as prev_id, (select user_id +1 as user_id from users where user_id

我有一个查询,它将获取当前记录以及下一个和上一个记录。但我需要这样做,这样它就不必是下一个连续的ID

select u.user_id, u.first_name, u.last_name, u.username,
    (select user_id -1 as user_id from users where user_id = u.user_id) as prev_id,
    (select user_id +1 as user_id from users where user_id = u.user_id) as next_id
from users u
where u.user_id = 3
这将返回我需要的内容,但如果用户_id 4不存在,我将如何获取下一条记录

还有,这是最快的方法吗


感谢您的帮助?

您可以使用limit获取下一个和上一个id。例如:

  select
          u.user_id,
          u.first_name,
          u.last_name,
          u.username,
          (select user_id as user_id 
           from users 
           where user_id <u.user_id 
           order by user_id desc
           limit 1 ) as prev_id,
           (select user_id as user_id 
           from users 
           where user_id >u.user_id 
           order by user_id asc
           limit 1 ) as next_id
        from users u
        where u.user_id = 3

使用两个联接和聚合函数:-

select u.user_id, u.first_name, u.last_name, u.username,
    MAX(u_prev.user_id) AS prev_id,
    MIN(u_next.user_id) AS next_id
from users u
LEFT OUTER JOIN user u_prev ON u.user_id > u_prev.user_id
LEFT OUTER JOIN user u_next ON u.user_id < u_next.user_id
where u.user_id = 3
GROUP BY u.user_id, u.first_name, u.last_name, u.username

希望这能对您有所帮助。

在应用程序中使用数据比查询本身复杂多了
SELECT * 
FROM `user` 
WHERE id >= (
 SELECT id 
 FROM `user` 
 WHERE id < (SELECT id FROM `user` WHERE firstname = 'abc')
 ORDER BY id DESC 
 LIMIT 1
)
ORDER BY id ASC
LIMIT 3