我想这对MySQL专业人士来说很容易。给定现有的已填充MySQL-InnoDB表,例如

key1 | key2 | foobar | position


其中key1和key2共同组成了主键,而position大部分仍然为NULL,用哪种SQL我最好用随机排序但迭代的整数值填充“ position”字段?例如。如果有4行,那么我想拥有(仅作为示例顺序):

3
1
4
2


背景:我想在网络应用中向用户显示表格,顺序应该是静态但随机的,即一旦随机决定但顺序可以预测。但是,有时我需要完全重新排列顺序,而表的其余部分保持不变。另外,有时我需要在表中添加几行新位置,但是这些新行的位置不得低于任何现有行,因此需要对其进行迭代,而不是使用完全随机的行浮动。

最佳答案

您可能想要尝试这样的事情:

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;

关于mysql - MySQL:填充随机迭代的位置值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1708646/

10-11 20:39