我需要能够从非自动增量ID中找到下一个和上一个记录。
数据库中的正确排序顺序使用此order by语句:
以下内容仅用于列出搜索的所有结果。 ORDER BY长度(general.blockid),general.blockid,length(general.plotid),general.plotid
需要知道下一条和上一条记录的网页,将网址中的唯一ID / varchar保存为简单吗?id = 100_1A
在上面的url变量示例中,
100_1A在db中作为blockplot
100是db as blockid
1A在数据库中作为plotid
当我在记录100_1A时,下一条记录应为100_1B。 之前100_1a的记录应为99_6C
我的问题是,如果在排序之前我不知道订单,我如何查询数据库以查找下一条记录?
我输入的排序顺序是搜索结果页面的工作排序。
当用户点击进入特定记录时,ID将传递给detail-view.php上的ur?id = 100_1a
从视图页面我需要取100_1A并使用相同的排序来查看100_1A之前和之后的记录
答案 0 :(得分:1)
你可以试试这个
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 ...