2011-05-08 110 views
1

我需要實現一個半隨機排序列表中, 我需要能夠解決X的項目,如第一批,其餘由隨機半隨機順序

問題命令,

會像

"..ORDER BY fixed DESC, rand" 

其中固定是一個布爾?

如果不是,你會怎麼建議?

+3

應該用一個很小的修正就可以了:'ORDER BY fixed DESC,RAND()'。 – Jon 2011-05-08 11:47:37

回答

0

按Jon的評論,

@rank:= 0; 
SELECT * FROM (
    SELECT @rank:= @rank +1 as rank, * FROM table1 
) s ORDER BY (s.rank < 10) DESC, RAND()  

將工作,但是,這將強制爲全表隨機順序排序。

以下將會快得多。

@rank:= 0; 
SELECT s.* FROM 
    (
    SELECT @rank:= @rank +1 as rank, * FROM table1 LIMIT 200 
) s 
ORDER BY (s.rank < 10) DESC, RAND(); 

因爲這隻會對200個項目進行排序,而不是整個表格。

+0

我不明白這是什麼@關於...:$ btw,該列表將約爲最多20個項目 – 2011-05-09 11:50:59

+0

@Toni,有些人有100萬條記錄,第一個查詢將會非常慢,記錄很多,第二更不如此。 – Johan 2011-05-09 20:43:55