【发布时间】:2013-05-07 05:12:55
【问题描述】:
/users/1 是分页结果的第一页。它运行一个查询:
SELECT * FROM users ORDER BY surname, id LIMIT 0, 100;
/users/2 调整生成的 SQL。 LIMIT 100, 100 显示第二页分页结果等。
我想在这些相同的分页结果按姓氏排序时实现 A-Z 链接;按日期排序时基于年份的链接;当按整数字段排序时,基于数字的链接。你明白了。
例如:URL /users/A 将重定向到 /users/1,但是我如何有效地确定 /users/B 应该重定向到哪个页面。
我知道/users/B 可以运行“过滤器”查询以提取姓氏以 B 开头的用户并在页面上显示。但是我想避免创建另一个页面,因此我想要一个重定向。
我还可以遍历SELECT surname FROM users ORDER BY surname 的结果,计算 B 和其他字母的开始位置,并将开始位置除以每页的结果 (100),但效率低下。我认为这需要一些聪明的 SQL。我使用 MySQL。
使用 Postgres 的类似问题: Pagination: Find out which page an item is on (given primary key & sorting order)
【问题讨论】:
-
小心,您的第一个 SQL 将结果递增 100。第一个应该是
LIMIT 0, 100,第二个应该是LIMIT 100, 100,第三个应该是LIMIT 200, 100。 -
谢谢,我更正了偏移量。