MySQL动态查询与随机子集查询

时间:2013-08-01 15:17:36

标签: mysql random subset

我有一个事件数据库。每个活动都有一个等级(1-5)。我想按日期范围查询数据库的事件,我想选择一个随机的事件集,排名为1,然后是一组随机的事件,排名为2等。

此查询为我提供了1级事件的随机选择:

SELECT * FROM
(
SELECT * FROM  `events` 
WHERE  `date` >1326578956 
AND `date`<1326870399 
AND `rank`=1 
ORDER BY RAND()
) 
e LIMIT 0,10

但是可能存在没有等级1或等级2等事件的情况。

仅使用MYSQL查询是否可行。我可以使用PHP迭代查询,使用结果填充数组,但我认为如果可能的话,用MYSQL完成所有工作会更优雅。

谢谢,

艾伦。

1 个答案:

答案 0 :(得分:0)

给这个打击:

select *
from
(
SELECT * FROM  `events`  WHERE  `date` >1326578956  AND `date`<1326870399  AND `rank`=1  ORDER BY RAND() LIMIT 10
union all
SELECT * FROM  `events`  WHERE  `date` >1326578956  AND `date`<1326870399  AND `rank`=2  ORDER BY RAND() LIMIT 10
union all
SELECT * FROM  `events`  WHERE  `date` >1326578956  AND `date`<1326870399  AND `rank`=3  ORDER BY RAND() LIMIT 10
union all
SELECT * FROM  `events`  WHERE  `date` >1326578956  AND `date`<1326870399  AND `rank`=4  ORDER BY RAND() LIMIT 10
union all
SELECT * FROM  `events`  WHERE  `date` >1326578956  AND `date`<1326870399  AND `rank`=5  ORDER BY RAND() LIMIT 10
) e
order by e.rank
limit 10;