MYSQL 从列表中随机插入

Posted

技术标签:

【中文标题】MYSQL 从列表中随机插入【英文标题】:MYSQL insert random from list 【发布时间】: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 的方法。

【问题讨论】:

【参考方案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`

【讨论】:

太棒了,正是我想要的

以上是关于MYSQL 从列表中随机插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程从列表中插入多行

如何从下拉列表中选择多个项目并将多个值插入 MYSQL

如何从下拉列表中获取值并插入 MySQL Workbench?

在 MySQL 中插入/更新随机日期

在看似随机的列表位置插入 CoreData 对象

如何在插入点后不重新索引/移动项目的情况下将数据插入到有序、随机可访问的列表中?