【问题标题】:MySQL: Fill with random iterated position valuesMySQL:填充随机迭代位置值
【发布时间】:2009-11-10 15:08:04
【问题描述】:

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

key1 | key2 | foobar | position

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

3
1
4
2

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

【问题讨论】:

    标签: mysql random


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多