2012-04-11 19 views
1

カスタム表示順序レコードを制御するために使用される整数フィールドを持つテーブルがあります。行番号に基づいてテーブルを更新します。

例:

SET @rownumber = 0; 

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

このクエリは私に少しこのような結果を与える:

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

レコードが/未承認(表示順で、したがって、ギャップを)削除されるまで、これがOKに動作します。

私がしたいのは、レコードが削除された後にdisplayorder列をrownumber変数の値に設定する更新クエリを実行することです。このような結果与える

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

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

+0

なぜギャップが重要ですか?注文は削除時に保存されます。確かに、挿入/更新時に「巧妙」な何かをするだけです。 – briantyler

+0

トリガーの使用に慣れていますか?削除によって引き起こされる更新は、あなたが探しているものを行います。つまり、エントリを並べ替える戦略については興味があります。ユーザーは#2と#3の間に行#5が表示されるように指定できますか? –

+0

このトリック(SELECT @ var:= @ var + 1 ..)はMySqlで動作しますか? – RBarryYoung

答えて

1

これは仕事をしたようです。

SET @rownumber = 0; 
INSERT INTO slides (id, displayorder) 
SELECT a.id, a.rownumber 
FROM (SELECT id, (@rownumber:[email protected]+1) AS rownumber FROM slides WHERE active = 1 ORDER BY displayorder ASC) AS a ON DUPLICATE KEY UPDATE displayorder = a.rownumber 
関連する問題