我有一个事件数据库。每个事件都有一个等级(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来完成这一切会更优雅。
谢谢,
艾伦。
发布于 2013-08-01 23:24:27
猛烈抨击一下这个:
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;https://stackoverflow.com/questions/17998032
复制相似问题