0

我有一个事件数据库。每个事件都有一个附加等级(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 完成这一切会更加优雅。

谢谢,

艾伦。

4

1 回答 1

0

给这个bash:

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;
于 2013-08-01T15:24:27.210 回答