1

マッサージと呼ばれる画像のようなmysqlテーブルがあります(例)

id | position | name
1  | 1 | name 1
2  | 2 | name 2
3  | 3 | name 3
4  | 4 | name 4

そのため、新しいレコードを更新、編集、または作成するときに、テーブルの列の位置を次のように更新したいと思います。(例: 行 ID=1、列位置を 1 から 3 に更新します。)

id | position | name
1  | 3 | name 1
2  | 1 | name 2
3  | 2 | name 3
4  | 4 | name 4

行を削除して新しい行を作成する方法を見つけました。しかし、正しい順序で更新する方法を見つけることができませんでした。私は次のようにphpコードを使用しています:
--- mysql_query("UPDATEinsertSET position = position + 1 WHERE position >= '$position'"); ---
ステートメントの前にメッセージを送信すると、正常に動作し、次のように戻ります。位置 2 で id=5 を挿入する場合。

id | position | name
1  | 1 | name 1
2  | 3 | name 2
3  | 4 | name 3
4  | 5 | name 4
5  | 2 | name 4

誰かがこれを理解するのを手伝ってくれることを願っています。
前もって感謝します。

4

3 に答える 3

1


私は自分の質問の解決策を見つけました。ここに投稿しているので、似たようなものを探している人はチェックしてください。
テーブルを更新するコードは次のとおりです。
テーブル名の例では、massage. 変数$old_positionは、id による where 句を使用してチェックする select ステートメントです。変数$positionはフォームから取得され、新しい位置に関連付けられます。

if($old_position > $position)
{                               
    mysql_query("UPDATE `massage` SET position = position + 1 WHERE position BETWEEN '$position' AND '$old_position'");
}

if($old_position < $position)
{
    mysql_query("UPDATE `massage` SET position = position - 1 WHERE position BETWEEN '$old_position' AND '$position'");
}

mysql_query("UPDATE `massage` SET position = '$position', name = '$name', visible = '$visible', content = '$content', date = '$date' WHERE id = '$id'");

これは、行を削除して位置を更新するためのものです

mysql_query("UPDATE `massage` SET position = position - 1 WHERE position > '$position'");
mysql_query("DELETE FROM `massage` WHERE id = '$id' LIMIT 1");

最後に、挿入するコードを次に示します。

mysql_query("UPDATE `massage` SET position = position + 1 WHERE position >= '$position'");
mysql_query("INSERT INTO `massage` (position, name, visible, content, date) VALUES ('{$position}', '{$name}', '{$visible}', '{$content}', '{$date}')");

みんなのおかげで何かを手伝ってくれました。

于 2013-07-06T00:09:56.750 に答える
0

新しい位置が以前の位置よりも大きいか小さいかを確認する必要があります。新しいポジションの方が大きい場合、古いポジションと新しいポジションの間のすべてのポジションはマイナス 1でなければなりません

たとえば、3 位から 8 位に移動するには、現在の 4 位から 8 位を 3 位から 7 位にシフトし、古い 3 位を 8 位に更新する必要があります (この時点で 2 つの 3 位があるため、位置ではなく ID を使用してこれを更新します)。ポジション)

新しい位置が小さい場合、同じことが適用されますが、変更はプラス 1です。

たとえば、8 位から 3 位に移動するには、現在の 3 位から 7 位を 4 位から 8 位にシフトし、古い 8 位を 3 位に更新する必要があります (この時点で 2 つの 8 位があるため、位置ではなく ID を使用してこれを更新します)。ポジション)

于 2013-07-02T02:20:41.507 に答える