Php 上一个下一个记录顺序语句

Php 上一个下一个记录顺序语句,php,sql,Php,Sql,我有以下SQL语句,该语句应能获取相对于当前记录的上一条或下一条记录: SELECT DISTINCT name FROM items WHERE category = ? AND $field $operator ? AND visible = 1 ORDER BY $field $direction LIMIT 1 变量设置如下: // these two may change $field = 'name'; $getNext = true; if($getNext){

我有以下SQL语句,该语句应能获取相对于当前记录的上一条或下一条记录:

SELECT DISTINCT name FROM items
   WHERE category = ? AND $field $operator ? AND visible = 1
   ORDER BY $field $direction LIMIT 1
变量设置如下:

// these two may change
$field   = 'name';
$getNext = true;

if($getNext){
  $direction = 'ASC';
  $operator  = '>';

}else{
  $direction = 'DESC';
  $operator  = '<';
}
//这两者可能会发生变化
$field='name';
$getNext=true;
如果($getNext){
$direction='ASC';
$operator='>';
}否则{
$direction='DESC';

$operator='我认为您面临的问题是排序不稳定。稳定排序每次运行时都会返回相同顺序的记录。在SQL中,只有当值唯一时,才能获得稳定排序

您可以通过将
name
添加到
orderby
子句中来解决此问题:

SELECT DISTINCT name
FROM items
WHERE category = ? AND $field $operator ? AND visible = 1
ORDER BY $field $direction, name
LIMIT 1

当字段具有相同的值时,添加
name
将使排序稳定,并应得到正确的结果。

在上面的示例中,name已包含在排序($field)中.@asmecher…但是它应该是唯一的,因为
是不同的
。那么有什么问题?同意,OTOH,但是这种方法不允许下一次/上一次浏览共享相同名称的条目。这可能是“奇怪的结果”他说的是,虽然还不清楚。是的,这似乎可行。现在我必须添加一个选择多个字段的界面:x。什么是“奇怪的结果”?