2011-04-02 58 views
0

我試圖從表中隨機選擇一個具有category_id = 0(其中category_id = 0)約束的n個元素。之前,我使用概率流採樣來這樣做,因爲它不掃描每個元素。從一個約束表中取n個隨機元素

但是,有沒有辦法做到這一點與額外的地方約束?

拉出所有元素,然後選擇一個隨機n個元素是沒有意義的,因爲該表是數百萬行。

我之前的查詢沒有額外的約束被粘貼在下面。

 SELECT * 
     FROM (SELECT @cnt := COUNT(*) + 1, @lim := %s 
       FROM table) vars 
STRAIGHT_JOIN (SELECT *, 
         @lim := @lim-1 
       FROM table 
       WHERE (@cnt := @cnt - 1) AND RAND() < @lim/@cnt) drv_tbl 

回答

2

嘗試此,

select * from <table> where <constrain> order by RAND() limit 0,<n> 
+0

這是一個效率相當低溶液 – 2011-04-02 04:12:40