2009-07-16 11 views
2
CREATE TABLE item (link MEDIUMINT UNSIGNED PRIMARY KEY NOT NULL, 
        title TEXT NOT NULL, 
        rank INT UNSIGNED NOT NULL AUTO_INCREMENT, 
        notes TEXT 
        ) ENGINE = INNODB; 

これを実装する際に問題があります。 ランクは、いつでも変更できるランク付けされたユーザーであり、アイテムはいつでも追加および削除できます。問題は、ランクがユニークで、常に1とnの間で順序付けされることです(nは表の行数)。 IE:アイテム5のランクを2に変更した場合、前のランク2のアイテムはランク3に、前のランク3はランク4に、前のランク4は新しいランク5になります。同様に、削除と作成すべての大小のランク付けされたアイテムは、操作の1つまたは1つずつカスケードする必要があります。順番に番号が付けられた「トップn」リストを維持するMySQLの方法

これを簡単に実装するためのパターンや手法はありますか?任意の助け

おかげで、

マイケル

答えて

0
リンクされたリスト内のアイテムを維持することができ

:項目を移動する

SELECT lv.* 
FROM (
     SELECT @r AS _parent, 
       @r := (
       SELECT id 
       FROM t_list 
       WHERE parent = _parent 
       ) AS id 
     FROM (
       SELECT @r := 0 
       ) vars, 
       t_list 
     ) li 
JOIN t_list lv 
ON  lv.id = li.id 

:このような

id parent title notes 

1 0  Title 1 Note 1 
2 1  Title 2 Note 2 
3 2  Title 3 Note 3 
4 3  Title 4 Note 4 

とクエリ(または一揃いのブロック)は、このデザインでは3つの操作を必要とします(UPDATE)あなたが動いているアイテムの親、あなたが動いているアイテム、あなたが動いているアイテムの両親)を選択します。

詳細については、私のブログにこの記事を参照してください。

関連する問題