我正在尝试使用主键_id和以下查询从表(用户)中检索随机行。
SELECT *
FROM user
WHERE _id IN (SELECT Floor(1 + ( Rand() * ( Count(_id) - 1 ) ))
FROM user);
没有从表中删除任何行,但是我(不一致)获得了多行返回...
我发现这很神奇,因为子查询的任何结果肯定会返回一个整数,这对一个主键.....应该总是只有1个记录!
我想使用一个查询,我可能会把它作为一个预备语句,我不使用LIMIT子句,因为我不能使用@variables来选择随机行。
我的MySQL欢迎声明告诉我我的版本如下: 服务器版本:5.5.29-0ubuntu0.12.04.2(Ubuntu)
答案 0 :(得分:3)
如何在查询中使用ORDER BY RAND() LIMIT 1;
而不是where _id IN (select FLOOR(1+(RAND()*(COUNT(_id)-1))) from user);
你得到多行原因(从用户选择FLOOR(1+(RAND()*(COUNT(_id)-1)))将在'user'表中为你的记录返回一个不同的值。那是因为RAND位。
单独运行select FLOOR(1+(RAND()*(COUNT(_id)-1))) from user
,你会看到。
答案 1 :(得分:1)
每行评估一次随机部分,所以有时会得到很多行,有时你却得不到。为了方便快捷地使用和平等加入和限制
SELECT
*
FROM
user
WHERE
_id > (
SELECT
FLOOR(1+(RAND()*(max(_id)-min(_id))))
FROM
user
) LIMIT 1
;
答案 2 :(得分:0)
select *
from user join (select FLOOR(1+(RAND()*(COUNT(_id)-1))) as _id from user) as Temp
on user._id=Temp._id