1

/users/1是分页结果的第一页。它运行一个查询:

SELECT * FROM users ORDER BY surname, id LIMIT 0, 100;

/users/2调整生成的 SQL。LIMIT 100, 100显示分页结果的第二页等。

当它们按姓氏排序时,我想实现指向这些相同分页结果的 AZ 链接;按日期排序时基于年份的链接;当按整数字段排序时,基于数字的链接。你明白了。

例如: URL/users/A将重定向到/users/1,但是我如何有效地确定应该/users/B重定向到哪个页面。

我知道/users/B可以运行一个“过滤器”查询来提取姓氏以 B 开头的用户并在页面上显示。但是我想避免创建另一个页面,因此我想要一个重定向。

我还可以遍历SELECT surname FROM users ORDER BY surname计算 B 和其他字母开始位置的结果,并将开始位置除以每页的结果(100),但这效率低下。我认为这需要一些聪明的 SQL。我使用 MySQL。

使用 Postgres 的类似问题: 分页:找出项目所在的页面(给定主键和排序顺序)

4

2 回答 2

3

像这样的东西怎么样:

select Page
from (
    select substring(Surname, 1, 1) as SurnameFirstLetter, min(page) as Page
    from (
        select Surname, ceiling((@row := @row + 1) / 100) as page
        from users, (select @row := 0) r
        order by Surname
    ) t
    group by substring(Surname, 1, 1)
) t
where SurnameFirstLetter = 'B'
于 2013-04-19T14:25:45.837 回答
1

您可以使用select count(*) from users where surname<'Current'获取当前位置。

于 2013-04-19T14:11:58.367 回答