【发布时间】:2011-05-14 21:37:49
【问题描述】:
我的挑战是我有一张桌子,例如在论坛中发帖,我想正确地获得 LIMIT 子句的偏移量。
为了说明这个例子: Table Post - 请记住 OFFSET 是行的编号/索引。
OFFSET 0: ID = 17, AUTHOR = ABC, CREATE_DATE = 2011-05-01
OFFSET 1: ID = 39, AUTHOR = ABC, CREATE_DATE = 2011-05-02
OFFSET 2: ID = 77, AUTHOR = ABC, CREATE_DATE = 2011-05-03
OFFSET 3: ID = 78, AUTHOR = ABC, CREATE_DATE = 2011-05-04
OFFSET 4: ID = 99, AUTHOR = ABC, CREATE_DATE = 2011-05-05
OFFSET 5: ID = 33, AUTHOR = ABC, CREATE_DATE = 2011-05-06
OFFSET 6: ID = 45, AUTHOR = ABC, CREATE_DATE = 2011-05-07
OFFSET 7: ID = 11, AUTHOR = ABC, CREATE_DATE = 2011-05-08
OFFSET 8: ID = 13, AUTHOR = ABC, CREATE_DATE = 2011-05-09
OFFSET 9: ID = 88, AUTHOR = ABC, CREATE_DATE = 2011-05-10
现在我想查询 ID = 45,我的分页结果应该是每页 5 个条目。
SELECT Table.* FROM Table WHERE Table.id = 45 ORDER BY Table.create_date;
结果是 ID = 45 的一行。然后我想知道相对于表中总共 10 个条目的偏移量为 6。我想要每页 5 行,所以下面的语句 x = 5。
换句话说,我知道偏移量 = 6 的行位于结果页面的第二页,每页有 5 个条目。
SELECT Table.* FROM Table LIMIT x, 5
我怎么知道 x?
我的第一个想法是从表中获取所有 ID,然后查找正确的 ID,然后将偏移量除以 5。
问题:有没有更好的方法在 SQL 中执行此操作,因为对我来说这似乎是一个非常常见的挑战?
额外问题:SQL 解决方案很好;如果有区别,具体在MySQL中怎么做?
【问题讨论】: