【发布时间】:2011-04-24 03:19:03
【问题描述】:
我有一个简单的问题。
当我执行“Select * from table where rand()”时,我得到 rand # of rows。这是否与 select * from table limit rand() 相同(但它不起作用)?
【问题讨论】:
我有一个简单的问题。
当我执行“Select * from table where rand()”时,我得到 rand # of rows。这是否与 select * from table limit rand() 相同(但它不起作用)?
【问题讨论】:
数据库查询中的where 子句只是一个语句,它会产生真或假值,因为表中的每一行都被考虑包含在结果集中。通常,T/F 计算涉及被查询表中的一个或多个字段,但这不是必需的。
当您执行... WHERE rand() 时,您基本上会为每一行获得0 <= N < 1 范围内的随机值。 MySQL 通过将值四舍五入为 0 或 1 将其转换为布尔值。因此,随机数 0.5->0.999 变为 1 (TRUE),随机数 0 -> 0.49999 舍入为 0 (FALSE)。
【讨论】:
Limit你的MySQL查询的结果要在一定数量范围内的结果。而Select * from table where rand()搜索整个表并随机选择一个
【讨论】:
当你使用
... LIMIT RAND()
您需要考虑 RAND() 函数的作用 - 它返回一个介于 0.0 和 1.0 之间的值 - 因此它实际上是 LIMIT(0) - 您将始终得到零返回结果。
http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand
【讨论】:
rand() 的计算结果总是介于 0 和 1 之间。
如果在限制子句中使用它,它将不返回任何行,因为它的计算结果小于 1 行。
如果您在 where 子句中使用它,它应该始终评估为真,因为它始终大于 1,并且将返回所有行,而不是随机行数。
【讨论】: