2017-06-28 5 views
3

の割合に基づいて、ランダムなオプションを取得するために、SQLクエリをラッキーコンセプトドロー:私たちは、外観の割合に応じてランダムオプションを取得する必要があり、私はデータベースで複数のオプションがあります</p> <p>を次のようにラッキードローのコンセプトを開発しています外観

データベースのテーブルこのテーブルから今

option_id | option_name | option_type | option_in_day(%) | option_status 
---------------------------------------------------------------------- 
1    $2 Off   2    100     1 
2    $3 Off   2    95     1 
3    $4 Off   2    95     1 
4    $5 Off   2    90     1 
5    $8 Off   2    90     1 
6    $60 Cashback 2    10     1 
7    $100 Cashback 2    5     1 
8    Umbrela  2    50     1 
9    Iphone   2    2     1 
10   International 
       Tour   2    1     1 
11   Fidget 
       Spinner  2    70     1 
12   Free 
       membership  2    30     1 
13   Samsung S8  2    10     1 
14   $20 Off  2    60     1 
15   Travel Card 2    50     1 
16   Soft Toys  2    70     1 

を以下のようである私は割合に応じてランダム8オプションを取得したいです。

結果で取得する確率が低いオプションのチャンスは少なくなります。

私はSQLでランダム関数を試しましたが、要件に到達できません。

+0

[link](https://stackoverflow.com/questions/580639/how-to-randomly-select-rows-in-sql)を確認してください。これを試しましたか? 'SELECT * FROM table_name ORDER BY RAND() LIMIT 8' – Regolith

+0

私は既に@Regolithを試しましたが、データで与えられたパーセンテージに基づいて行う必要があります – Kashyap

答えて

1

これは、あなたがそれを行うことができるはずであるか:

set @percentage = 100 * rand(); 
select * 
from table_name 
order by table_name.percentage >= @percentage, rand() 
limit 0, 8; 

このクエリは、変数にランダムな割合を格納します。次に、2つの基準によって問合せを順序付けます。第1の基準は、tablepercentageがランダム化されたpercentageよりも高いかまたは等しいことである。これにより、ランダム化されたpercentageの上と下の両方の要素がある場合は、上記の要素が優先されます。第1の順序付け基準で類似の結果を有する要素は、ランダムに順序付けられる。

関連する問題