MYSQL下一个上一个记录

时间:2010-12-14 19:00:24

标签: mysql sql

我需要能够从非自动增量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之前和之后的记录

1 个答案:

答案 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 ...