Php 如何获取MySQL中特定行的偏移量?

Php 如何获取MySQL中特定行的偏移量?,php,mysql,where,offset,Php,Mysql,Where,Offset,我正在尝试建立一个图像数据库,它不保持ID的一致记录。例如,它可能会变为1、2、6、7、12,但正如您所看到的,只有5行。 在表中,我有fileid和filename。我创建了一个PHP脚本,在我给出文件ID时显示图像。但是如果我给它一个不存在的ID 5,我会得到一个错误。这很好,因为我希望有一个错误,但对于使用前进和后退按钮浏览这些图像的用户来说不是这样。“前进”和“后退”按钮需要检索给定ID之后的真实fileid。希望这是有意义的 这就是我想象代码的样子: SELECT offset( WH

我正在尝试建立一个图像数据库,它不保持ID的一致记录。例如,它可能会变为1、2、6、7、12,但正如您所看到的,只有5行。 在表中,我有fileid和filename。我创建了一个PHP脚本,在我给出文件ID时显示图像。但是如果我给它一个不存在的ID 5,我会得到一个错误。这很好,因为我希望有一个错误,但对于使用前进和后退按钮浏览这些图像的用户来说不是这样。“前进”和“后退”按钮需要检索给定ID之后的真实fileid。希望这是有意义的

这就是我想象代码的样子:

SELECT offset( WHERE fileid=4 )

这将给出fileid等于4的行的偏移量。我认为这很容易理解。我需要它的原因是为了创建前进和后退按钮。因此,我计划添加1或从偏移量中提取1,从而获得新ID和新文件名。这样,当用户浏览时,它将自动跳过无效ID值,但在提供错误ID时,它将给出一个错误。

如果结果按x升序排列,则以下内容将给出表中的当前报价集:

SELECT COUNT(*) FROM tablename WHERE x < x_of_your_current_item;
将为您提供下一个项目(类似地,
将向上:

SELECT * FROM table WHERE id > 'your_current_id' ORDER BY id LIMIT 1;
往下看:

SELECT * FROM table WHERE id < 'your_current_id' ORDER BY id DESC LIMIT 1;
从表中选择*,其中id<'your_current_id'ORDER BY id DESC LIMIT 1;

ps:最好将限制设置为2,这样当只返回一条记录时,您就可以看到数据库中的第一条或最后一条记录。

您可以使用偏移量。最初将偏移量设置为零。
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 50,10;
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 60,10;
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 70,10;
您的查询第一次将被删除 按表格顺序选择*表格id限制0,1

接下来呢 按表格顺序选择*表格id限制1,1 .. 等等

这样一来,你就可以从头到尾得到记录

现在是后退和前进按钮

  • 后退按钮:第一次或偏移量为零时禁用后退按钮

  • 前进按钮: 查询当前记录时,也会检查下一条记录 i、 e.在这项质询之后 选择*FROM TABLE order by TABLE_id LIMIT 0,1引发如下查询 选择*FROM TABLE order by TABLE_id LIMIT current_offset+1,1,并检查查询是否生成任何结果如果生成结果,然后设置布尔值say next=TRUE else next=FALSE

使用此布尔值启用或禁用前进按钮

单击“后退”按钮时,还有一件事是将偏移量作为当前偏移量-1发送,对于“前进”按钮,则将偏移量作为当前偏移量+1发送


我希望这能有所帮助。我只是偶然发现了这一点并想到了这个解决方案。

你到处都能看到这样的“错误”,即使在stackoverflow上,分页也“不工作”得很好。正如所说的,如果同时删除了一个图像,分页会以某种方式“跳跃”,但你无法真正避免。我用这种方式检查行在哪一页上(例如,如果分页为每页10页)
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 50,10;
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 60,10;
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 70,10;