Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在排序结果的编号分页中找到某个内容的起始页?_Mysql_Sql - Fatal编程技术网

Mysql 如何在排序结果的编号分页中找到某个内容的起始页?

Mysql 如何在排序结果的编号分页中找到某个内容的起始页?,mysql,sql,Mysql,Sql,/users/1是分页结果的第一页。它运行一个查询: SELECT * FROM users ORDER BY surname, id LIMIT 0, 100; /users/2调整生成的SQL限制100,100显示分页结果的第二页等 我想实现这些相同分页结果的A-Z链接,当它们按姓氏排序时;按日期订购时基于年份的链接;按整数字段排序时基于数字的链接。你明白了 e、 例如:URL/users/A将重定向到/users/1,但我如何有效地确定/users/B应重定向到哪个页面 我知道/user

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

SELECT * FROM users ORDER BY surname, id LIMIT 0, 100;
/users/2
调整生成的SQL<代码>限制100,100显示分页结果的第二页等

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

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

我知道
/users/B
可以运行一个“筛选”查询,从页面上显示的姓氏为B的用户中提取出来。但是,我希望避免创建另一个页面,因此需要重定向

我还可以反复查看
selectnamesfromsuserorderbynames
计算B和其他字母的起始位置的结果,并将起始位置除以每页的结果(100),但这是低效的。我认为这需要一些聪明的SQL。我使用MySQL

使用Postgres的类似问题:

您可以从姓氏的用户中使用
选择计数(*)您可以从姓氏的用户中使用
选择计数(*)类似这样的内容如何:

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'

像这样的怎么样:

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'

小心,您的第一个SQL将结果递增100。第一个应该是
限制0,100
,第二个
限制100,100
,第三个
限制200,100
。谢谢,我更正了偏移量。小心,您的第一个SQL将结果增加100。第一个应该是
限制0,100
,第二个
限制100,100
,第三个
限制200,100
。谢谢,我更正了偏移量。简洁,效果非常好。在这里,您可以看到解决方案的运行简明扼要,效果非常好。在这里,您可以看到解决方案的实际效果