我有一些我想使用基于游标的分页查询的表,但它需要申请多个列。基于MySQL游标的多列分页
让我们用2列一个简单的例子 - 我取的第一页是这样的:
SELECT column_1, column_2
FROM table_name
ORDER BY column_1, column_2
LIMIT 10
后,我得到的结果,我可以获取基于最后一排的下一个页面。假设最后一行是column_1 = 5, column_2 = 8
。我想这样做:
SELECT column_1, column_2
FROM table_name
WHERE column_1 > 5 AND column_2 > 8
ORDER BY column_1, column_2
LIMIT 10
但这显然是错误的。这将筛选出具有column_1 = 5, column_2 = 9
(因为column_1
过滤器)的行或具有column_1 = 6, column_2 = 6
行(因为column_2
过滤器)
我可以做这样的事情,以避免该问题:
SELECT column_1, column_2
FROM table_name
WHERE column_1 > 5
OR (column_1 = 5 AND column_2 > 8)
ORDER BY column_1, column_2
LIMIT 10
但这变得非常繁琐,而且容易出错超过2列...
而且,我的用例包括了多种类型(INT UNSIGNED
和BINARY
)列,但都相当的
你有什么建议吗?
谢谢!
感谢您的详细解答! 我尝试使用简单的“元组”比较,它工作(MySQL 5.6)。尝试运行一些'EXPLAIN'查询来查看它是否比扩展版本更好... – amitayh
哈!我不知道MySQL支持那个元组比较语法!比扩展更容易......(c1,c2,c3)>(r1,r2,r3)。是的,请检查EXPLAIN计划......我们希望MySQL使用索引范围扫描操作,并将c1,c2,c3作为主要列。 – spencer7593