MySql 查询 return 随机行 return 意外的行数
MySql query to return a random row returns unexpected number of rows
我正在尝试从 MySql table 中的一长串单词中随机获取一个单词:word_list [id*|wword]
.
我的查询看起来是这样的:
SELECT * FROM word_list w where id = (SELECT FLOOR(1 + RAND()*(10-1)))
我认为上面的查询会 return 一个且只有一个 ID 介于 1 和 9 之间的随机行。
令我惊讶的是,它有时会 returns 0、1、2 或 3 行。这怎么可能?
它正在为每一行计算一个新的随机数。当随机表达式的结果与 id
匹配时,该行将包含在结果中。
这应该证明您的查询是如何工作的:
SELECT id, wword, FLOOR(1+RAND()*(10-1)) AS r FROM word_list;
这 return 每行都有一个不同的随机数(这也是您在 WHERE 子句中对随机表达式所做的)。有时随机数 returned 作为 r
在相应的行上等于 id
。不经常,但偶尔。当这两个数字恰好相等时,即会在您的查询中 return 编辑一行。
您需要的是计算一个随机数一次。例如:
SELECT word_list.*
FROM (SELECT FLOOR(1+RAND()*(10-1)) AS id) AS r
CROSS JOIN word_list USING (id);
假设您的 table 保证每个 id
值在 1 到 10 之间有一行,这应该 return 恰好一行。
另一个解决方案可能是按 RAND()
排序而不是限制为 1。
如果您的 table 不太大,则此方法有效。
SELECT * FROM word_list ORDER BY RAND() LIMIT 1;
我正在尝试从 MySql table 中的一长串单词中随机获取一个单词:word_list [id*|wword]
.
我的查询看起来是这样的:
SELECT * FROM word_list w where id = (SELECT FLOOR(1 + RAND()*(10-1)))
我认为上面的查询会 return 一个且只有一个 ID 介于 1 和 9 之间的随机行。
令我惊讶的是,它有时会 returns 0、1、2 或 3 行。这怎么可能?
它正在为每一行计算一个新的随机数。当随机表达式的结果与 id
匹配时,该行将包含在结果中。
这应该证明您的查询是如何工作的:
SELECT id, wword, FLOOR(1+RAND()*(10-1)) AS r FROM word_list;
这 return 每行都有一个不同的随机数(这也是您在 WHERE 子句中对随机表达式所做的)。有时随机数 returned 作为 r
在相应的行上等于 id
。不经常,但偶尔。当这两个数字恰好相等时,即会在您的查询中 return 编辑一行。
您需要的是计算一个随机数一次。例如:
SELECT word_list.*
FROM (SELECT FLOOR(1+RAND()*(10-1)) AS id) AS r
CROSS JOIN word_list USING (id);
假设您的 table 保证每个 id
值在 1 到 10 之间有一行,这应该 return 恰好一行。
另一个解决方案可能是按 RAND()
排序而不是限制为 1。
如果您的 table 不太大,则此方法有效。
SELECT * FROM word_list ORDER BY RAND() LIMIT 1;