【问题标题】:MYSQL insert random from listMYSQL 从列表中随机插入
【发布时间】:2010-11-21 01:51:16
【问题描述】:

我想在表格中添加一个随机值。虽然我知道如何在一个范围内添加随机整数,但我目前对如何从列表中添加随机选择的项目感到困惑。

假设我有一个用于 IM 帐户的 MYSQL 表。我想用随机数据填充它。

INSERT INTO `im` (`im`, `service`)
SELECT LOWER(`last`), RANDOM-SELECTION-HERE
FROM `contact`;

这个查询应该做的是将联系人的姓氏添加到 IM 表中,并从我给出的数组中随机选择。例如,数组将是:

['AIM', 'ICQ', 'MSN', 'Yahoo', 'GTalk', 'Other']

所以,我想添加用户的姓氏和数组中的随机项之一。

注意:我知道使用 PHP、Perl 等编程语言完全可以实现这一点,但我并不想这样做。请尝试提供一种严格使用 MYSQL 的方法。

【问题讨论】:

    标签: mysql random


    【解决方案1】:
    INSERT INTO `im`
    (`im`, `service`)
    SELECT LOWER(`last`),
        ELT(0.5 + RAND() * 6, 'AIM', 'ICQ', 'MSN', 'Yahoo', 'GTalk', 'Other')
    FROM `contact`
    

    【讨论】:

    • 工作精美且易于理解。谢谢你:)
    • 请注意,0.5 + RAND() * 6 将返回介于 0 和 6 之间的值,其中 0 从 ELT() 返回 NULL 值。 1 + RAND() * 6 将返回 1 到 6 之间的值,这意味着 ELT() 总是从列表中返回结果。
    • @AndyBurton:不正确。 ELT() 的第一个参数,如果是浮点数,则四舍五入以生成索引; 0.5 加上任何 >= 0 的数字不能四舍五入为 0。
    • @AndyBurton:另外,1 + RAND() * 6 产生的值介于 1 到 7 之间,因此超出了列表大小并产生了 NULLs。
    • @chaos 很抱歉,我将它包装在 FLOOR 中,同时翻回生成 0-6 的 MySQL 文档,我将其更改为 FLOOR(1+RAND()*6) 以获得 1-6 的包容性。 mysql 行是To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)).
    【解决方案2】:

    如果您愿意将服务添加到另一个表...

    INSERT INTO `im` ( `im` , `service` )
    SELECT LOWER( `last` ) , (
       SELECT `service`
       FROM `service`
       ORDER BY RAND( )
       LIMIT 1
    )
    FROM `contact`
    

    【讨论】:

    • 太棒了,正是我想要的
    猜你喜欢
    • 2014-09-02
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多