1

データベースフィールドのリストがある場合:

id    order    title
1     3        This is a post
2     1        This is another post
3     2        This is also a post
4     4        This is still a post

そして、これらの順序を順序に基づいて変更したいと思います。
ID#1の注文を2に設定した場合ID#3の注文を3に設定し
たいID#4の注文を1に設定した場合ID#1の注文を4に設定したいID#2の注文を2であり、ID#3で3になるように注文します。

これどうやってするの?かなりシンプルなはずなのにわかりません。
検索しましたが、何を検索すればよいかわかりません...

4

3 に答える 3

3

UPDATE次の 2 つのステートメントを使用して、SQL で実行できます。

START TRANSACTION;
SELECT order FROM t WHERE order BETWEEN $new_order AND $old_order FOR UPDATE;

UPDATE t SET order = order + 1  WHERE order BETWEEN $new_order AND $old_order;
UPDATE t SET order = $new_order WHERE id = $id;

COMMIT;

同時実行の問題を防ぐために、これらの更新中にテーブルをロックしました (ただし、トランザクション/ロックは InnoDB テーブルにのみ適用されることに注意してください)。

于 2012-04-30T07:46:24.263 に答える
1

まず、再利用したい値を$other_row持つものを見つける必要があります。order次に、各行の値を変更します。

$id_to_set = 1;
$order_to_set = 2;

// Find the order that will need to be swapped
$result = mysql_query("select order from xxx where id = $id_to_set");
$row = mysql_fetch_row($result);
// Find the other row that will be modified
$result = mysql_query("select id from xxx where order = $order_to_set");
$other_row = mysql_fetch_row($result);

// Do the actual swapping
mysql_query("update xxxx set order = $order_to_set where id = $id_to_set");
mysql_query("update xxxx set order = " . $row['order'] . " where id = " . $other_row['id']);
于 2012-04-30T07:42:27.910 に答える
0

2 つの方法があります。SQL ドキュメントを読み、クエリで ORDER BY クローズを使用します。

PHP doc を読み、usort 関数を使用する

于 2012-04-30T07:23:24.777 に答える