0

mysqlを使用して列の範囲を更新するのに問題があります。私の全体的な目標は、ユーザーがリストアイテムの位置を変更できるようにし、変更に対応するために他のすべてのリストアイテムの位置をシフトできるようにすることです。たとえば、1〜6の範囲の番号があり、位置2のアイテムを位置4に移動し、各アイテムが1つの位置番号のみを占有している間に、各アイテムに変更を補正させたいとします。私はこれに数時間取り組んできましたが、疲れすぎて正直に考えることができません。私はまだ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!  ';
}
}

要求された位置変更は正しく作成されますが、範囲内の他のすべての数値が誤った値に変更されます。おそらく単純な間違いです。

4

2 に答える 2

0

だから、私は興味のある人のための解決策を思いついた. それは最もきれいではありませんが、うまくいったようです..

if ($newposition>$oldposition) {
    for ($i=$oldposition+1; $i<=$newposition; $i++) {
        $workset = mysql_query('SELECT * FROM work WHERE position='.$i.' LIMIT 1', $connection);
        while ($work = mysql_fetch_array($workset)) {
            mysql_query('UPDATE work SET position='.$i.'-1 WHERE position='.$i.'');
            mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.'');
        }
    }
}
elseif 
($newposition<$oldposition) {
    for ($i=$oldposition-1; $i>=$newposition; $i--) {
        $workset = mysql_query('SELECT * FROM work WHERE position='.$i.' LIMIT 1', $connection);
        while ($work = mysql_fetch_array($workset)) {
            mysql_query('UPDATE work SET position='.$i.'+1 WHERE position='.$i.'');
            mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.'');
        }
    }
}
elseif 
($newposition==$oldposition) {
}
于 2012-07-02T20:01:09.750 に答える
0

この行を参照してください -

mysql_query('UPDATE work SET position=position+1 WHERE position<'.$oldposition.' AND position<='.$newposition.'');

本当に正しいですか?そうあるべきだと思う

mysql_query('UPDATE work SET position=position+1 WHERE position > '.$oldposition.' AND position <= '.$newposition.'');
于 2012-07-02T06:08:42.957 に答える