select .. from (
Select ... from ... order by weight desc limit N
) order by rand() limit 1
上面每次都需要创建一个临时表,效率不高,不符合条件。
如何正确地做到这一点?
select .. from (
Select ... from ... order by weight desc limit N
) order by rand() limit 1
上面每次都需要创建一个临时表,效率不高,不符合条件。
如何正确地做到这一点?
如果我理解正确,您希望Rth
有序结果集中的行R
是随机数。如果是这样,那么带有两个参数的 LIMIT 选项似乎是您想要的。第一个参数可以是来自 的随机数1 to N
:
SELECT ... order by weight desc limit R,1
我没有安装 MySQL,所以我无法测试它。所以我不知道 R 是否可以直接使用 RAND() 或者是否必须预先计算。
你应该看看:
http://akinas.com/pages/en/blog/mysql_random_row/
有几个建议可以在避免表扫描的同时实现这一点,包括:
SELECT * FROM `table` WHERE id >= (
SELECT FLOOR( MAX(id) * RAND()) FROM `table`
) ORDER BY id LIMIT 1;