1

レコードのカスタム表示順序を制御するために使用される整数フィールドを持つテーブルがあります。

例:

SET @rownumber = 0;

SELECT 
@rownumber:=@rownumber+1 AS rownumber, 
slides.displayorder 
WHERE 
active = 1 
ORDER BY displayorder ASC

このクエリでは、次のような結果が得られます。

 rownumber | displayorder
-----------+-------------
     1           2
     2           7 
     3           15
     4           50 
     5           80

これは、レコードが削除/未承認になるまで正常に機能します (したがって、表示順序にギャップが生じます)。

私がやりたいことはdisplayorder、レコードが削除された後に列を行番号変数の値に設定する更新クエリを実行することです。

次のような結果が得られます。

 rownumber | displayorder
-----------+-------------
     1           1
     2           2 
     3           3
     4           4 
     5           5

これを行う簡単な方法はありますか?

4

1 に答える 1

1

これは仕事をするように見えました。

SET @rownumber = 0;
INSERT INTO slides (id, displayorder) 
SELECT a.id, a.rownumber 
FROM (SELECT id, (@rownumber:=@rownumber+1) AS rownumber FROM slides WHERE active = 1 ORDER BY displayorder ASC) AS a ON DUPLICATE KEY UPDATE displayorder = a.rownumber
于 2012-04-12T08:43:09.637 に答える