mysql 通过任何其他字段名称而不是通过使用 order by id 获取上一个或下一个记录顺序

Posted

技术标签:

【中文标题】mysql 通过任何其他字段名称而不是通过使用 order by id 获取上一个或下一个记录顺序【英文标题】:mysql fetch previous or next record order by anyother field name and not by using order by id 【发布时间】:2010-10-22 11:51:23 【问题描述】:

我正在显示一个列表。

用户可以编辑任何项目。

我正在显示下一个上一个按钮,当单击它时,它会动态地从数据库中获取下一个上一个记录。没有页面重新加载。

这与 id 配合得很好。喜欢how can i get next and previous field id with php from mysql MySQL next/previous ids (arbitrary sort order)

目前我的显示像

select * from table order by name asc

对于下一个和上一个我这样使用...

select * from table where id > $id order by name asc limit 1
select * from table where id < $id order by name desc limit 1

以上是我在网上搜索得到的。

在这个顺序中,id 不会按顺序排列,所以我不能使用 id 来获取下一个和上一个记录,我认为是这样。

我想获取与任何其他字段相关的下一个和上一个记录,而不是通过 id。

这样的事情。

select * from table where id > 5 order 按名称 asc 或 desc 限制 1。

查询是什么?

注意

有 15000 条记录。默认为一半填充。剩下的一半应该由管理员更新。所以不是在管理员更新一条记录后重新加载页面,而是获取另一条记录并在屏幕上动态显示,以便他可以继续更新内容。不会有任何页面重新加载。他只需单击更新,就会出现下一条记录。他可以选择上一个或下一个按钮在记录之间导航。

【问题讨论】:

select * from table where id > 5 order by name asc or desc limit 1. 应该可以,考虑到您使用 asc 或 desc,而不是两者。 没有。它正在工作,但不如预期。是的 or 是在引用的文本中,而不是作为代码,所以我用它只是一个指示。 【参考方案1】:

您需要过滤 name 的值:

SELECT * FROM `table`
WHERE name < 'Foo'
ORDER by name DESC
LIMIT 1

这仅适用于名称唯一的情况。如果可以有重复,你需要一个决胜局。例如,您可以使用 id 列进行平局。

SELECT * FROM `table`
WHERE name < 'Foo' OR (name = 'Foo' AND id < 42)
ORDER by name DESC, id DESC
LIMIT 1

【讨论】:

我同意,绑定是最好的方法,本质上是智能转义。 我的意思是,您的原始答案在 SQL 中有 $name 没有并且表明需要做更多的工作。 sooperappu.运作良好。谢谢你。是的,我默认逃脱了。当有帖子时,首先我使用 xss_clean 并删除所有斜杠(如果有),然后使用 mysql 真正的转义字符串【参考方案2】:

你最好做更多的传统分页。

$itemsPerPage = 10;

$page = (int)$_GET['page'];  // do more validation to check this is a valid integer

$start = ($page * $itemsPerPage) - $itemsPerPage;

$sql = "SELECT * FROM `table`WHERE name < ? ORDER by name DESC limit $start, $itemsPerPage";

【讨论】:

没有。有15000条记录。默认为一半填充。剩下的一半应该由管理员更新。因此,管理员更新了一条记录后,我没有重新加载页面,而是获取另一条记录并动态显示在屏幕上,以便他可以继续更新内容。不会有任何页面重新加载。他只需单击更新,就会出现下一条记录。他可以选择上一个或下一个按钮在记录之间导航。

以上是关于mysql 通过任何其他字段名称而不是通过使用 order by id 获取上一个或下一个记录顺序的主要内容,如果未能解决你的问题,请参考以下文章

从数据库迁移

是否有任何 MySQL 工具可用于使用 GUI(而不是通过编写代码手动)修改存储过程?

Java 文本字段输入问题

如何通过选择 * 并使用 php 在执行时间 O(1) 中访问 mysql 字段

MySql SELECT AS - 附加所有字段名称

ABAP基础-动态数据对象