我搜索过并搜索过但找不到我想要的东西,这可能非常简单。
我有一个表,它有一个优先级字段,可以按照选择的顺序显示。我希望能够做到的我已经看到但不知道如何让我的代码做到这一点。
获取优先级为1,2,3,4,5,6的数据,并将#5更改为4并相应地调整所有其他数字。 所以现在它将是1,2,3,4(旧5),5(旧4),6。
我正在使用PHP,Mysql,出于某种原因,我没有得到这个概念。我可以增加/减少数量,但我无法调整周围的其他数字。所以我最终得到1,2,3,4,4,6
表结构 ID,Cat,Title,Priority 我只想增加/减少猫。我正在考虑一次排序多个,所以它可能 1(旧5),2(旧3),3(旧6)......等
感谢您的帮助。
修改
也许我的第一次解释没有得到足够的解释。 假设我有10张图片,每张图片都有一个唯一的ID,现在给出的优先级与ID相同。我可以显示ORDER BY优先级的图像 ID 1,2,3,4,5,6,7,8,,9,10 优先事项1,2,3,4,5,6,7,8,9,10
但是看完照片之后我想改变它们的优先级。 所以...我点击一个箭头,该链接告诉数据库将优先级为4的图片ID 4更新为ID 4优先级2,因为它更重要。
现在我的数据库看起来像这样。 ID 1,2,3,4,5,6,7,8,9,10 优先级1,2,2,3,5,6,7,8,9,10,因为其他优先级数字没有改变,因为我不知道如何进行这项工作。
我想要做的是,在我将一个优先级更改为新的优先级后,重新排列数字,使它们在该数字之后按数字顺序排列,因为它们不那么重要。我该怎么做?
答案 0 :(得分:2)
我希望以下代码可以帮助您解决问题/挑战。:
<?php
//Say that you've recieved array from db...
$arr = array();
$arr[0] = array('id'=>5, 'sortOrder' => 1, 'picture' => 'picture1');
$arr[1] = array('id'=>6, 'sortOrder' => 2, 'picture' => 'picture2');
$arr[2] = array('id'=>7, 'sortOrder' => 3, 'picture' => 'picture3');
$arr[3] = array('id'=>9, 'sortOrder' => 4, 'picture' => 'picture4');
$arr[4] = array('id'=>10, 'sortOrder' => 5, 'picture' => 'picture5');
//Do some sorting...
$executeSQL = down($arr,2); //Tell sortOrder to decrease for picture3 and to increase for picture2
//Array will change to:
//$arr[1] = array('id'>=6, 'sortOrder' => 3, 'picture' => 'picture2');
//$arr[2] = array('id'>=7, 'sortOrder' => 2, 'picture' => 'picture3');
//$executeSQL returns an array of two sql-statements that you should execute
$executeSQL = up($arr, 1); //Decrease sortorder for picture2 and increase for picture3
//Array will change to:
//$arr[1] = array('id'=>6, 'sortOrder' => 2, 'picture' => 'picture2');
//$arr[2] = array('id'=>7, 'sortOrder' => 3, 'picture' => 'picture3');
//$executeSQL returns an array of two sql-statements that you should execute
echo print_r($arr,true); //Will output the original array
function down(Array &$arr, $index) {
$origPrev = $arr[$index-1]['sortOrder'];
$arr[$index-1]['sortOrder'] = $arr[$index]['sortOrder'];
$arr[$index]['sortOrder'] = $origPrev;
$sql = "UPDATE table SET sortOrder=" . $origPrev . " WHERE id=" . $arr[$index]['id'];
$sql2 = "UPDATE table SET sortOrder=" . $arr[$index]['sortOrder'] . " WHERE id=" . $arr[$index-1]['id'];
return array($sql, $sql2);
}
function up(Array &$arr, $index) {
$origPrev = $arr[$index+1]['sortOrder'];
$arr[$index+1]['sortOrder'] = $arr[$index]['sortOrder'];
$arr[$index]['sortOrder'] = $origPrev;
$sql = "UPDATE table SET sortOrder=" . $origPrev . " WHERE id=" . $arr[$index]['id'];
$sql2 = "UPDATE table SET sortOrder=" . $arr[$index]['sortOrder'] . " WHERE id=" . $arr[$index+1]['id'];
return array($sql, $sql2);
}
?>