2011-09-23 36 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或其他來源。