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

これにバッシュを与えます:

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 に答える