0

私のテーブルでは、特定のグループの値の順序を含む「ord」フィールドが 1 つあります。

tbl_test で、フィールドは Group、time、ord、name です

記入例

id       Group time                      ord          name
----------------------------------------------------------------
1        1     1340865990                1            john
2        1     1340865880                2            jos
3        1     1340867830                3            mery
4        1     1340867830                4            bill
5        1     1340867830                5            stiev
6        1     1340867830                6            tom
7        2     1340867830                1            test
8        3     1340867830                2            john

グループ 1 から一連の値を削除する場合、たとえば「mery」と「tom」を削除した場合、「ord」フィールドには、残りの項目の更新された順序値が必要です。

id       Group time                      ord          name
----------------------------------------------------------------
1        1     1340865990                1            john
2        1     1340865880                2            jos
4        1     1340867830                3            bill
5        1     1340867830                4            stiev

削除されるアイテムの順序は任意です。アイテムを削除するには、ユーザーは ID とグループのリストを提供します。

これをmysqlに実装するにはどうすればよいですか?

ノート :

単一のエントリが削除されたときに ord を更新するには、次のクエリを使用しています。

SET @a = 3;
UPDATE tbl_test 
SET ord = 5,time = 1337690755 
WHERE Group = 1 AND id = 6;
4

1 に答える 1

1

注文がtime(またはid) に関連している場合、これは機能する可能性があります。

SET @order:=0;
UPDATE tbl_test
SET ord=@order:=@order+1
WHERE group=1
ORDER BY time, id

上記の回答は次のものから借用されています:シーケンス番号 mysql で列を更新する

代替方法: Mysql Insert Order Number By VARCHAR Field

SET @order:=0;
UPDATE 
SET ord=@order:=@order + 1
FROM tbl_test
ORDER BY time, id

列が使用されていない場合は、リセットAUTO_INCREMENT idすることもできます。ord

于 2012-06-28T09:44:55.430 に答える