MYSQL从列表中随机插入

Ali*_*ssi 28 mysql random

我想在表中添加一个随机值.虽然我知道如何在一个范围内添加随机整数,但我目前难以理解如何从列表中添加随机选择的项目.

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

INSERT INTO `im` (`im`, `service`)
SELECT LOWER(`last`), RANDOM-SELECTION-HERE
FROM `contact`;
Run Code Online (Sandbox Code Playgroud)

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

['AIM', 'ICQ', 'MSN', 'Yahoo', 'GTalk', 'Other']
Run Code Online (Sandbox Code Playgroud)

所以,我想添加用户的姓氏加上数组中的一个随机项.

注意:我知道这完全可以使用PHP,Perl等编程语言,但我并不是想这样做.请尝试使用MYSQL严格执行此操作.

cha*_*aos 66

INSERT INTO `im`
(`im`, `service`)
SELECT LOWER(`last`),
    ELT(0.5 + RAND() * 6, 'AIM', 'ICQ', 'MSN', 'Yahoo', 'GTalk', 'Other')
FROM `contact`
Run Code Online (Sandbox Code Playgroud)

  • 注意,`0.5 + RAND()*6`将返回0到6之间的值,其中0从ELT()返回NULL值.`1 + RAND()*6`将返回1到6之间的值,这意味着ELT()总是返回列表中的结果. (8认同)
  • @AndyBurton:不正确.`ELT()`的第一个参数(如果是浮点数)被舍入以产生索引; 0.5加任意数> = 0不能舍入为0. (3认同)
  • @AndyBurton:另外,`1 + RAND()*6`产生的值从1到7(包括1和7),从而超出了列表大小并产生了'NULL`s. (2认同)

小智 9

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

INSERT INTO `im` ( `im` , `service` )
SELECT LOWER( `last` ) , (
   SELECT `service`
   FROM `service`
   ORDER BY RAND( )
   LIMIT 1
)
FROM `contact`
Run Code Online (Sandbox Code Playgroud)