Php 上一个下一个记录顺序语句
我有以下SQL语句,该语句应能获取相对于当前记录的上一条或下一条记录: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){
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。什么是“奇怪的结果”?