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

时间:2009-11-10 15:08:04

标签: mysql random

我认为这对MySQL专业人员来说很容易。给定一个填充的MySQL-InnoDB表,如

key1 | key2 | foobar | position

其中key1和key2一起组成主键,并且位置大部分仍然是NULL,我最好使用随机排序但迭代的整数值填充“position”字段的SQL?例如。如果有4行,那么我想要(仅作为示例顺序):

3
1
4
2

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

1 个答案:

答案 0 :(得分: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;