2009-12-17 65 views
0

如何形成一个查询来选择'm'行随机地从一个查询结果有'n'行mysql随机行

for ex;从具有50行

我试着像如下查询结果 5行,但它的错误

select * from (select * from emp where alphabet='A' order by sal desc) order by rand() limit 5; 

ü可以想一想,为什么他需要子查询,我需要从一组顶部的5个不同的名字50由内部查询产生。

回答

1
SELECT * FROM t 
ORDER BY RAND() LIMIT 5 

或从您的查询结果:

SELECT * FROM (SELECT * FROM t WHERE x=y) tt 
ORDER BY RAND() LIMIT 5 
+0

第二查询结果的错误如下: ERROR 1248(42000):每一个派生表必须有它自己的别名 – ArK 2009-12-17 11:22:17

+1

刚闭幕后添加 'some_name'(不带引号)parenthese – 2009-12-17 11:42:10

+0

注意'ORDER BY RAND()'当行数变大时变得昂贵 – 2009-12-17 11:44:09

1

这会给你为 'M'(限制)

TRUNCATE((RAND()*50),0); 

...替代50与正使用的数字。
要检查它尝试以下操作:

SELECT TRUNCATE((RAND()*50),0); 

我应该警告说,这可能是一个结果返回0,这是正确的吗?

例如,你可以做这样的事情:

SELECT COUNT(*) FROM YOUR_TABLE 

...并把结果保存在一个名为totalRows例如变量。那么你可以这样做:

SELECT * FROM YOUR_TABLE LIMIT TRUNCATE((RAND()*?),0); 

你在哪里替换'?'与totalRows变量,根据您使用的技术堆栈。
现在更清楚了吗?如果不是,请在您的问题中添加更多信息。

+0

对不起,我不明白你的解决方案。可以告诉我更多请 – ArK 2009-12-17 11:29:47

+0

编辑,看看它是否更清晰 – 2009-12-17 11:35:59