我有一个事件数据库。每个活动都有一个等级(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完成所有工作会更优雅。
谢谢,
艾伦。
答案 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;