使用列表中的随机链接更新列


Update column with random links from a list

我有一个名为 users 的数据库表(25k 条记录)

里面有一个名为"阿凡达"的字段

我需要更新此字段,从列表中分配一个随机网址

列表网址:

http://myserver.com/img/1.pnghttp://myserver.com/img/2.pnghttp://myserver.com/img/3.pnghttp://myserver.com/img/4.pnghttp://myserver.com/img/5.pnghttp://myserver.com/img/6.pnghttp://myserver.com/img/7.pnghttp://myserver.com/img/8.pnghttp://myserver.com/img/9.pnghttp://myserver.com/img/10.pnghttp://myserver.com/img/11.pnghttp://myserver.com/img/12.pnghttp://myserver.com/img/13.pnghttp://myserver.com/img/14.pnghttp://myserver.com/img/15.png

我有这个代码:

UPDATE TABLE SET VALUE=VALUE+ROUND(1+RAND()*4);

如何调整此查询?

如果你的图像遵循一个很好的模式,@peterm的答案是好的,但你也可以从列表中选择一个随机字符串:

SELECT ELT(ROUND(0.5+RAND()*15), 
 'http://myserver.com/img/1.png',
 'http://myserver.com/img/2.png',
 'http://myserver.com/img/3.png',
 'http://myserver.com/img/4.png',
 'http://myserver.com/img/5.png',
 'http://myserver.com/img/6.png',
 'http://myserver.com/img/7.png',
 'http://myserver.com/img/8.png',
 'http://myserver.com/img/9.png',
 'http://myserver.com/img/10.png',
 'http://myserver.com/img/11.png',
 'http://myserver.com/img/12.png',
 'http://myserver.com/img/13.png',
 'http://myserver.com/img/14.png',
 'http://myserver.com/img/15.png') AS avatar;

见 http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_elt

要更新表,可以在 UPDATE 语句中使用相同的ELT()表达式:

UPDATE TABLE SET AVATAR=ELT(...);

你在寻找这样的东西吗?

UPDATE users
   SET avatar = CONCAT('http://myserver.com/img/', FLOOR(1 + RAND() * 15), '.png');

这是 SQLFiddle 演示


虽然我建议只存储整数部分,但如果您需要存储它,

UPDATE users
   SET avatar = FLOOR(1 + RAND() * 15);
SELECT id, CONCAT('http://myserver.com/img/', avatar, '.png') avatar
  FROM users;

这是 SQLFiddle 演示

然后在选择数据时即时构建头像URL,或者更好地在客户端代码中执行此操作(从某种设置中获取域名和路径)

SELECT id, CONCAT('http://myserver.com/img/', FLOOR(1 + RAND() * 15), '.png') avatar
  FROM users;

这是 SQLFiddle 演示