2012-03-14 73 views
2

我试着去算表中的行数,并为现场随机数“随机” 现在这个工程:插入随机数到表中MYSQL

SELECT COUNT(*) FROM my_table; 

和这个作品:

UPDATE my_table SET random = FLOOR(6500 * RAND()) + 1; 

但是,这并不工作:

UPDATE my_table SET random = FLOOR((SELECT COUNT(*)) * RAND()) + 1; 

但这种计算的行为0,并增加了一个,这样一ll字段有数字1而不是唯一的随机数字。

任何想法我做错了将是最有帮助的。

回答

8

这是怎么回事?

SELECT @cnt := count(*) FROM my_table; 
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1; 

演示:http://sqlfiddle.com/#!2/a896d/4

+0

这正是需要什么,我没有意识到你可以使用像PHP中的变量。谢谢! – 2012-03-14 11:27:17

0

你问你在做什么错。正如MySQL手册所说:“目前,您无法更新表并从子查询中的同一个表中进行选择。”这意味着你不能做类似

update my_table set random = (select min(my_field) from r); 

你正在做一个完整的选择作为更新的一部分。

但是,您可以在发现时使用没有错误的选择,但结果并非您所期望的 - 您所使用的SELECT语句的范围只是当时正在处理的行。您可以通过创建一个名为num场,做这个测试此:

update my_table set random = (select count(*)); 

你会看到,随机设置为1的每一行,因为选择是看刚刚你正在更新一行时刻。

解决方法是计算行数,将其存储在变量中,并在另一个语句中引用该变量。

SET @row_count = count(*) from my_table; 
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;