我不得不编写一个 SQL 查询来选择一个随机记录,我毫不犹豫地打开了 MySQL 文档,阅读了关于随机性的内容并得到了这个
SELECT * FROM `Task` WHERE id = (FLOOR(1 + RAND() * (SELECT Count(`id`) FROM `Task`)))
第一次一切正常(幸运),然后是 3 个条目,然后是 0 个,依此类推……为什么?
我不得不编写一个 SQL 查询来选择一个随机记录,我毫不犹豫地打开了 MySQL 文档,阅读了关于随机性的内容并得到了这个
SELECT * FROM `Task` WHERE id = (FLOOR(1 + RAND() * (SELECT Count(`id`) FROM `Task`)))
第一次一切正常(幸运),然后是 3 个条目,然后是 0 个,依此类推……为什么?
MySQL 为每条记录重新计算一个随机数的值。让我们看看发生了什么:
结果:
现在我们
id=rnd在该行的输出处对 this 施加过滤器:共 2 个条目。碰巧的是,在从数据库中选择这些 id 时
rand(),它给出了完全相同的值并且条件有效。如果我们不幸运rand(),它可能不会为任何行提供匹配值。这将是安全的:
在这种情况下,MySQL 将首先计算 (once)
rand(),然后它会查找具有所需 id 的记录。