2009-11-10 36 views
0

我想這對MySQL專業人員來說很容易。鑑於現有填充的MySQL的InnoDB表像MySQL:填充隨機迭代的位置值

key1 | key2 | foobar | position 

其中鍵1和鍵2一起組成了主鍵,位置大多仍NULL,什麼SQL將我最好填上了「位置」欄用隨機排序但迭代整數值?例如。如果有4行,那麼我想有(只是作爲一個例子順序):

3 
1 
4 
2 

背景:我想要顯示的表在Web應用程序中的用戶,並且順序應該是靜態的,而是隨機的,即一旦隨機決定,但隨後以可預測的順序。但有時我需要徹底改組訂單,而表格的其餘部分保持不變。另外,我有時需要用新的位置向表中添加幾行,但是這些新行的位置必須低於現有位置,因此需要迭代它,而不是使用完全隨機的浮動。

回答

1

你可能想嘗試這樣的:

CREATE TEMPORARY TABLE IF NOT EXISTS temptable (
    key1 int NOT NULL, 
    key2 int NOT NULL, 
    pos int NOT NULL auto_increment, 
    PRIMARY KEY (key1, key2) 
    ) 
SELECT key1, key2 
FROM yourtable 
ORDER BY RAND(); 

UPDATE yourtable 
SET position = pos 
FROM yourtable INNER JOIN temptable 
       ON yourtable.key1 = temptable.key1 
        AND yourtable.key2 = temptable.key2;