2011-09-23 54 views
1
SELECT a, b, c FROM ".TBL_A." WHERE [statement] **`ORDER BY RAND()`** LIMIT 1 
UNION 
(SELECT a, b, c FROM ".TBL_A." WHERE [different statement] ORDER BY RAND() LIMIT 5)"; 

这个查询在没有第一个ORDER BY RAND()的情况下工作正常,但我需要的是先由第一条语句随机获取第一条记录,然后再由其他语句随机读取其他条件。如何从联合查询中获取rand记录?

看来,我不能在一个查询中使用两个顺序通过报表...

有什么想法?

+0

您使用的是什么RDBMS? –

+0

'ORDER BY RAND()'建议MySQL,我相信,但是很好的问题... –

回答

1

您的方法应该可行。也许你只需要将你的选择包裹在外部选择中。

SELECT * FROM (
    SELECT a, b, c FROM your_table WHERE [statement] ORDER BY RAND() LIMIT 1 
) T1 
UNION 
SELECT * FROM (
    SELECT a, b, c FROM your_table WHERE [different statement] ORDER BY RAND() LIMIT 5 
) T2 

注意。确保你已经考虑过UNION和UNION ALL之间的区别。把它们混淆是一个常见的错误。

+0

这就是它!谢谢。现在我必须找出UNION和UNION ALL之间的区别:) Apprediated – user681982

0

你应该选择它全部无序 - 然后做大订单的2个查询顺序。

0

不要使用RAND()它是一个可怕的发生器。使用密码安全的发生器。根据平台,它可能是arcrand(),从/ dev/random读取,openSSL或其他来源。