Mysql 获取当前行以及下一个和上一个记录
我有一个查询,它将获取当前记录以及下一个和上一个记录。但我需要这样做,这样它就不必是下一个连续的IDMysql 获取当前行以及下一个和上一个记录,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
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