我试图从MySql表中的一长串单词中获得一个随机的单词:
。
word_list [id*|wword]
我的疑问目前看来是这样的。
SELECT * FROM word_list w where id = (SELECT FLOOR(1 + RAND()*(10-1)))
我以为上面的查询会返回一条且只有一条Id在1到9之间的随机行。
令我惊讶的是,它有时会返回0、1、2或3行。这怎么可能呢?
它正在为每一行计算一个新的随机数。当随机表达式的结果与
相匹配时,那么该行就被包含在结果中。
id
这应该证明你的查询是如何工作的。
SELECT id, wword, FLOOR(1+RAND()*(10-1)) AS r FROM word_list;
这将在每一行上返回一个不同的随机数(这也是你在WHERE子句中使用随机表达式的目的)。有时,作为
返回的随机数等于各自行的r
。不是经常,但偶尔会有。当这两个数字碰巧相等时,这时就会在你的查询中返回一条记录。id
而你需要的是计算一次随机数。比如说。