0

私は使用してPHP/MySQLいますが、実際に擬似コードを探しています

アイテムのリストが表示する順序をユーザーが変更できるようにするにはどうすればよいですか?

ユーザーが#4を#1に移動したとしましょう。#4を#0に変更してから、foreach行(1-3)を1増やして、2-4にした後、#0を#1に変更しますか?

これが最善の方法ですか?

更新:これはやることリスト用であり、アイテムの順序を入れ替えるだけではありません(つまり、#1と#4を入れ替えますが、アイテムを他のアイテムの前に移動します)

SQLデータベースにitem_id、task、completed、order_idのアイテムがあります

変更する必要があるのはorder_idです

4

3 に答える 3

3

私はあなたがすでにそれを持っていたと思います:

UPDATE items SET order_id = 0 WHERE order_id = 4;
UPDATE items SET order_id = order_id + 1 WHERE  order_id >= 1 AND order_id < 4;
UPDATE items SET order_id = 1 WHERE order_id = 0;

order_id iのアイテムを位置j(i> j)まで移動するには:

UPDATE items SET order_id = 0 WHERE order_id = i;
UPDATE items SET order_id = order_id + 1 WHERE  order_id >= j AND order_id < i;
UPDATE items SET order_id = j WHERE order_id = 0;

order_id iのアイテムを位置j(j> i)に移動するには:

UPDATE items SET order_id = 0 WHERE order_id = i;
UPDATE items SET order_id = order_id - 1 WHERE  order_id > i AND order_id <= j;
UPDATE items SET order_id = j WHERE order_id = 0;

別のオプションは、を追加することprevious_siblingです。すでにリストがロードされていると仮定すると、前の兄弟は[1 => null, 2 => 1, 3 => 2, 4 => 3, 5 => 4]次のようになります。

UPDATE items SET previous_sibling = 3 WHERE id = 5; #previous_sibling of 4
UPDATE items SET previous_sibling = null WHERE id = 4; # previous_sibling of 1
UPDATE items SET previous_sibling = 4 WHERE id = 1;
于 2013-03-24T13:19:56.120 に答える
0

可能であれば、JavaScript(つまり、jquery)を使用して並べ替えを行うのが通常は最善であることがわかりました。これは、ユーザーが再利用するたびにバックエンドにアクセスする必要がないためです。

ただし、phpを使用してこれを行う場合は、array_push、array_popなどを確認することをお勧めします。彼らはあなたがやろうとしていることを成し遂げることができます。例については、 http://www.php.net/manual/en/function.array-push.php#56479を参照してください。

于 2013-03-24T12:22:10.247 に答える
0

id$task_idを使用してタスクを次のように設定するとし$order_idます。

UPDATE `table`
   SET order_id = order_id + 1
 WHERE order_id > $order_id;

UPDATE `table`
   SET order_id = $order_id
 WHERE task_id  = $task_id;

そして、注文IDが常に連続していて、ギャップがないことを確認するために、次のようにします。

  SELECT @numrow := 0;

  UPDATE `table`
     SET order_id = @numrow := @numrow + 1;
ORDER BY order_id ASC;

これにより、すべての注文IDに番号が付け直されます。

于 2013-03-24T14:09:03.370 に答える