2011-05-08 160 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