您可以使用UNION获取MySQL中的上一个和下一个记录。
语法如下
(select *from yourTableName WHERE yourIdColumnName > yourValue ORDER BY yourIdColumnName ASC LIMIT 1) UNION (select *from yourTableName WHERE yourIdColumnName < yourValue ORDER BY yourIdColumnName DESC LIMIT 1);
为了理解这个概念,让我们创建一个表。创建表的查询如下
mysql> create table previousAndNextRecordDemo - > ( - > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, - > Name varchar(30) - > );
使用insert命令在表中插入一些记录。
查询如下
mysql> insert into previousAndNextRecordDemo(Name) values('John'); mysql> insert into previousAndNextRecordDemo(Name) values('Sam'); mysql> insert into previousAndNextRecordDemo(Name) values('Carol'); mysql> insert into previousAndNextRecordDemo(Name) values('Bob'); mysql> insert into previousAndNextRecordDemo(Name) values('Larry'); mysql> insert into previousAndNextRecordDemo(Name) values('David'); mysql> insert into previousAndNextRecordDemo(Name) values('Ramit'); mysql> insert into previousAndNextRecordDemo(Name) values('Maxwell'); mysql> insert into previousAndNextRecordDemo(Name) values('Mike'); mysql> insert into previousAndNextRecordDemo(Name) values('Robert'); mysql> insert into previousAndNextRecordDemo(Name) values('Chris'); mysql> insert into previousAndNextRecordDemo(Name) values('James'); mysql> insert into previousAndNextRecordDemo(Name) values('Jace');
使用select语句显示表中的所有记录。
查询如下
mysql> select *from previousAndNextRecordDemo;
以下是输出
+----+---------+ | Id | Name | +----+---------+ | 1 | John | | 2 | Sam | | 3 | Carol | | 4 | Bob | | 5 | Larry | | 6 | David | | 7 | Ramit | | 8 | Maxwell | | 9 | Mike | | 10 | Robert | | 11 | Chris | | 12 | James | | 13 | Jace | +----+---------+ 13 rows in set (0.00 sec)
这是使用带有UNION的单个查询获取上一条和下一条记录的查询
mysql> (select *from previousAndNextRecordDemo WHERE Id > 8 ORDER BY Id ASC LIMIT 1) - > UNION - > (select *from previousAndNextRecordDemo WHERE Id < 8 ORDER BY Id DESC LIMIT 1);
以下是输出
+----+-------+ | Id | Name | +----+-------+ | 9 | Mike | | 7 | Ramit | +----+-------+ 2 rows in set (0.03 sec)