我需要能够从非自动增量 ID 中找到下一条和上一条记录。
数据库中的正确排序顺序使用此 order by 语句:
以下仅适用于列出搜索的所有结果。 ORDER BY length(general.blockid), general.blockid, length(general.plotid), general.plotid
需要知道下一条和上一条记录的页面,将唯一的 id/varchar 保存在 URL 中,简单地为 ?id=100_1A
在上面的 url 变量示例中,
100_1A 在数据库中作为 block 图
100 是数据库中的 blockid
1A 在数据库中作为 plotid
当我记录 100_1A 时,下一条记录应该是 100_1B。 到100_1a的前一条记录应该是99_6C
我的问题是,当我在排序之前不知道顺序时,如何查询数据库以获取下一条记录?
我输入的排序顺序适用于搜索结果页面。
当用户点击进入特定记录时,id 被传递给 detail-view.php?id=100_1a 上的 ur
从 View 页面我需要取 100_1A 并使用相同的排序来查看 100_1A 之后和之前的记录
最佳答案
你可以试试这个
set @row:=0;
select * from
(
select *, (@row:=@row+1) as row_number from your_tables
order by
length(general.blockid), general.blockid,
length(general.plotid), general.plotid
) as rowset
WHERE id='100_A';
以上内容将通过引用 row_number
列为您提供 100_A 的位置,您可以使用该列来确定下一行/上一行,例如,
set @row:=0;
select * from
(
select *, (@row:=@row+1) as row_number from your_tables
order by
length(general.blockid), general.blockid,
length(general.plotid), general.plotid
) as rowset
where
row_number in(first_query_row+1, first_query_row-1);
请注意,如果表很大,查询成本可能会非常高,
你可以考虑创建一个view汇总表来存储row_number和uniqid
创建汇总表的例子
create table ordering_table
(
row_number int(10) unsigned not null default 0,
blockid varchar(255),
); /* no index, define yourself later */
set @row:=0
insert into ordering_table
select @row:=@row+1, blockid from your_tables
order by ...
关于MYSQL 下一条 上一条 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443056/