2017-03-04 9 views
0

クリック数に基づいて、自分のサイトにトレンド広告を表示したい。データベースから上位10行を選択し、結果をランダムに表示

私のSQLクエリは次のようになります。

SELECT ad_id, clicks from ads ORDER BY clicks DESC LIMIT 5 

Result: 
ad_id clicks 
3393 2204 
4495 1208 
2399 932 
2780 777 
3316 679 

私はランダムに毎回ページの更新この結果を表示したいです。

私は

SELECT * from ads ORDER BY clicks DESC, RAND() LIMIT 10 

を使用してみました。しかし、これは同じ結果にページの更新のたびに与えて動作していません。

私は次のように使用している場合:

SELECT ad_id, clicks from ads ORDER BY RAND(), clicks DESC LIMIT 10 
ad_id clicks 
9762 0 
6305 1 
4040 17 
11598 0 
11347 0 

は、それがランダムデータを示しているが、今回のクリックの最大数がゼロです。

すべてのページの更新時にトップクリックの結果をランダムに表示する方法を教えてください。

答えて

1

あなたは上位10行を取得して、ランダムな順序でそれらを表示、この使用したい場合:

:クリック数の降順にソート10件のランダムに選択されたレコードを取得したい場合は、これを試して

select * 
from (
    select * 
    from ads 
    order by clicks desc LIMIT 10 
    ) t 
order by rand() desc 

select * 
from (
    select * 
    from ads 
    order by RAND() LIMIT 10 
    ) t 
order by clicks desc 

サブクエリで10個のランダムなレコードが見つかった後、それをソートします。

または多分あなたには、いくつかのトップのうち、10件のランダムなレコードを取得したい、クリック数の降順にソート100、行と言う:応答のための

select * 
from (
    select * 
    from (
     select * 
     from ads 
     order by click desc LIMIT 100 -- change this as per your needs 
     ) t 
    order by rand() limit 10 
    ) t 
order by clicks desc 
+0

おかげで、それは動作しません。ランダムな行を選択しています。そのランダムな行のうち、トップのトップクリックを与えています。上位10個のクリックを選択しない –

+0

100個のクリックを選択すると、完璧に動作します。ランダムに上位10個の結果が得られます。しかし、上位10個のクリックだけを選択してランダムに表示したい場合、毎回同じ結果が表示されます。 –

+0

@Kritika - それも追加しました。最初のクエリを参照してください。 – GurV

関連する問題