我有一张这样的 table
+------------+
| Id| data |
|============|
| n | some_n |
| a | some_a |
| f | some_f |
| b | some_b |
+------------+
如果我只知道上一个 ID 行,有没有办法获取下一个“N”行?例如,我知道第二行 (a) 的 id,并且我想从那里获取接下来的 2 行。查询将返回 {(f, some_f), (b, some_b)}
查询看起来像这样:
SELECT * FROM table WHERE [something] LIMIT start,numRows;
问题是...我如何知道起始值?我在 where 子句中放入了什么?
最佳答案
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
关于mysql 从特定行获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955031/