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
。谢谢,我更正了偏移量。简洁,效果非常好。在这里,您可以看到解决方案的运行简明扼要,效果非常好。在这里,您可以看到解决方案的实际效果