1

ロトの結果について基本的な分析を実行しようとしています:)

次のようなデータベースがあります。

id|no|day|dd|mmm|yyyy|n1|n2|n3|n4|n5|n6|bb|jackpot|wins|machine|set
--------------------------------------------------------------------
1 |22|mon|22|aug|1999|01|05|11|29|38|39|04|2003202| 1  | Topaz | 3
2 |23|tue|24|aug|1999|01|06|16|21|25|39|03|2003202| 2  | Pearl | 1

これはほんの一例です。したがって、n1~n6 は宝くじの基準球で、bb はボーナス ボールを表します。

まだ出ていないランダムな数列を 1 つだけ表示する PHP/SQL コードを書きたいと思います。ただし、01、04、05、11、29、38、および 39 の数字が出てきた場合、コードでそれらの数字を出力したくはありませんが、理論的には数字のセットが既に当選番号。

私はこれの論理を理解することができません。助けていただければ幸いです。

前もって感謝します

4

2 に答える 2

1

与えられた例のように、ボールがデータベースに昇順で格納されていると仮定すると、6 つの数字のランダムなシーケンスを生成し、それらを並べ替えてから、ランダムなボーナス番号を 1 つ生成することができます。これが完了したら、データベースに対して単純な SQL クエリを実行し、結果が返されるかどうかを確認するだけです。

$nums=...//generate your 6 numbers plus bonus number here
sort($nums);

$mysqli=new mysqli('...','...','...','...');
$stmt=$mysqli->prepare("SELECT * FROM table
    WHERE n1=? AND n2=? AND n3=? AND n4=? AND n5=? AND n6=? AND bb=?");
$stmt->bind_param('iiiiiii', $nums[0], $nums[1], $nums[2], $nums[3], $nums[4], $nums[5], $nums[6]);
$stmt->execute();
$stmt->store_result();

if($stmt->num_rows==0)
    //your numbers have not been drawn before - return them
else
    //otherwise loop round and try again

両方の数字のリスト (ボーナス ボールではない) が並べ替えられている限り、既に描かれた一連の数字の順序が異なっていても問題はありません。

これは、以前の抽選のデータベースがいっぱいになるにつれて効率が低下しますが、数十年は心配する必要はないと思います. :-)

于 2012-08-11T18:45:43.990 に答える
1

すでに描画された各結果 (各行) を何らかの順序で、おそらく昇順で並べ替えてから、既に描画された結果のセット (すべての行) を並べ替えるのはどうですか? 次に、何が残っているかを確認できるリストで簡単に検索できます。

たとえば、これまでに描かれたことのないセットが必要だとしますか? 「穴」を見つけるまで、リストをループするだけで済みます。これは、これまでに描かれたことのないセットです。さらに最適化したい場合は、最後に「穴」を見つけたインデックスを保存することもできます。そうすれば、リストの同じ部分を2回ループする必要がなくなり、リストの「完了」部分を破棄してディスクスペースを節約することもできます。または、思いついた新しい番号をランダムに継ぎ合わせたい場合は、次のことができますリスト内のランダムなオフセットから開始します。

これを効果的に行うには、事前に並べ替えられたセットを格納するための追加の列を作成する必要があります。たとえば、(5, 3, 6, 4, 1, 2) がある場合、その列には 010203040506 が含まれる可能性があります。数値が固定オフセット ベースで発生するように、十分な数のゼロを追加します。

于 2012-08-11T21:02:54.930 に答える