MYSQL 下一条 上一条 记录

标签 mysql sql

我需要能够从非自动增量 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/

相关文章:

java - 尽管语句中存在数据,Blob 字段自动设置为 null

mysql - 基于sql中另一列中的值的增量值

sql - SQL 查询中\(反斜杠) 是什么意思?

mysql - 从现有数据库创建 EER 模型但已完成关系 - Workbench

php - UPDATE 仅使用 PHP 提供 MySQL 表中的字段

php - 如何在php中回显sql数据库中的指定数据

mysql - 多重连接显示多条记录

mysql - 如何优化 2700 万行表上的联接

php - 使用 MySQL + PHP 更新多个变量

php - 当从表中添加/删除列时,如何更新 mysql View ?