我在使用 mysql 更新一系列列时遇到了困难。我的总体目标是让用户能够更改列表项的位置,并让所有其他列表项移动位置以适应更改。因此,假设您有一个数字范围 1-6,并且您希望将位置 2 中的项目移动到位置 4,并让每个项目补偿更改,而每个项目仅占用一个位置编号。我已经为此工作了几个小时,我太累了,无法思考。我仍然是 mysql 的新手,但我几乎完成了我的第一个 cms,除了最后一个烦人的花絮。
有问题的代码是:
$newposition = $_POST['position'];
$oldposition = $_GET['oldposition'];
$id = $_GET['id'];
while ($work = mysql_fetch_array($workset)) {
if ($newposition>$oldposition) {
mysql_query('UPDATE work SET position=position-1 WHERE position<='.$newposition.' AND position>'.$oldposition.'');
mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.'');
}
elseif
($newposition<$oldposition) {
mysql_query('UPDATE work SET position=position+1 WHERE position<'.$oldposition.' AND position<='.$newposition.'');
mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.'');
}
elseif
($newposition==$oldposition) {
echo 'same value! ';
}
}
它正确创建请求的位置更改,但范围内的所有其他数字都更改为不正确的值。这可能是一个简单的错误..