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

时间:2010-10-22 11:51:23

标签: mysql

我正在显示一个列表。

用户可以编辑任何项目。

我正在显示下一个上一个按钮,当点击它时,它会动态地从db中获取下一个以前的记录。没有页面重新加载。

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

目前我正在显示

  

按名称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。

所以有点像这样。

  

从表中选择*,其中id&gt; 5个订单   按名称asc或desc limit 1。

什么是查询?

注意

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

2 个答案:

答案 0 :(得分:4)

您需要过滤名称的值:

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

答案 1 :(得分:0)

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

$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";