MySQL:用随机迭代的位置值填充

MySQL:用随机迭代的位置值填充,mysql,random,Mysql,Random,我想这很容易理解。给定一个已填充的MySQL InnoDB表,如 key1 | key2 | foobar | position 其中key1和key2共同构成主键,而position大部分仍然为NULL,使用什么样的SQL可以最好地使用随机排序但迭代的整数值填充“position”字段?例如,如果有4行,那么我希望有(作为示例顺序): 背景:我想在web应用程序中向用户显示该表,并且顺序应该是静态的但随机的,即,一旦随机决定,然后使用可预测的顺序。不过,有时候我需要完全重组订单,而桌子的其余

我想这很容易理解。给定一个已填充的MySQL InnoDB表,如

key1 | key2 | foobar | position
其中key1和key2共同构成主键,而position大部分仍然为NULL,使用什么样的SQL可以最好地使用随机排序但迭代的整数值填充“position”字段?例如,如果有4行,那么我希望有(作为示例顺序):


背景:我想在web应用程序中向用户显示该表,并且顺序应该是静态的但随机的,即,一旦随机决定,然后使用可预测的顺序。不过,有时候我需要完全重组订单,而桌子的其余部分则保持不变。此外,我有时需要向表中添加几行新位置,但这些新行的位置不得低于任何现有行,因此需要对其进行迭代,而不是说使用完全随机的浮点。

您可能需要尝试以下方法:

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;
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;