2012-08-26 44 views
1

我对可以按任意多列排序的表以及结果集中某一行的id进行排序查询。我如何获得下一个或上一个记录(或完整结果集中的id的偏移量)。在mysql查询中获取记录的偏移量

即。 让我们说,我有以下表

ID First_Col Second_Col Name 
1 34  24   John 
2 40  22   James 
3 48  5   Hugh 

如果first_col,并给予编号2排序,下一个记录是3,但如果排序由Second_Col,下一个记录是1

鉴于sortBy表达式(传递给我的函数)和id,我怎样才能轻松找到下一个记录?

+0

你是不是想实现分页功能? –

+0

无法理解这个问题?你想在这里实现什么? –

回答

2

这应该工作:

SELECT 
* 
FROM 
names 
WHERE 
Second_Col > (SELECT Second_Col FROM names WHERE ID = 2) 
ORDER BY 
Second_Col 
LIMIT 1 

http://sqlfiddle.com/#!2/fac71/3

0

给你:http://sqlfiddle.com/#!3/d8761/5

也许这是可以做到更有效,但它的工作原理:

SELECT T.ID from TBL T WHERE 
T.SECOND_COL= 
(SELECT MIN(TT.SECOND_COL) FROM TBL TT WHERE TT.SECOND_COL>(SELECT TTT.SECOND_COL FROM TBL TTT WHERE ID=2)) 
+0

首先,你的例子是使用MS SQL Server,而不是MySQL,你说得对,它可以在这里更高效地完成:http://stackoverflow.com/a/12131322/1432614 –

+0

MS SQL?这是标准的ANSI SQL。你在哪里提出这个问题? – Samson

+0

SQLFiddle链接显示“MS SQL Server 2008 R2”。 –