mysql从特定行获取行

时间:2013-06-06 06:23:38

标签: mysql sql database

我有一张这样的表

+------------+
| Id| data   |
|============|
| n | some_n |
| a | some_a |
| f | some_f |
| b | some_b |
+------------+

如果我只知道上一个ID行,有没有办法获得下一个“N”行?例如,我知道第二行(a)的id,我想从那里获得下一行。查询将返回{(f,some_f),(b,some_b)}

查询看起来像这样:

SELECT * FROM table WHERE [something] LIMIT start,numRows;

问题是......如何知道起始值?我在where子句中放了什么?

1 个答案:

答案 0 :(得分:2)

SELECT t.* FROM table t WHERE t.Id > 'a' ORDER BY t.Id LIMIT 2;

表格中的行没有隐含的顺序;因此缺少ORDER BY子句,数据库可以按任意顺序自由返回行。如果没有ORDER BY,则无法保证后续查询不会返回先前返回的行。

因此,为了让您知道“第二行”的Id值为'a',这意味着已经应用了某些排序。我的示例查询假定行按Id列排序。

使用指定的排序,查询可以使用谓词(WHERE子句中的条件)返回“下N行”,该谓词指定仅返回“跟随”最后检索的值的行。在排序行之后应用LIMIT子句,这样我们就可以保证获得“下N行”(按有序顺序)。

更通用的形式,如果行以非唯一键的顺序排序,则需要稍微复杂的谓词来处理相等条件,其中要检索的下一行具有与上次检索的行匹配的值...

SELECT t.*
  FROM table t
 WHERE ( t.col = last_col_value_retrieved AND t.id > last_id_value_retrieved )
    OR ( t.col > last_col_value_retrieved )
 ORDER BY t.col, t.id
 LIMIT 50