当選番号に対して宝くじのリストを検索するための MySQL のみのソリューションを探しています。
ball1、ball2、ball3、ball4 の 4 つの数字がそれぞれの列にあるチケットの行があります。これらは、必ずしも昇順であるとは限りません。
クエリは、さらに PHP を処理するために行を返すだけです。
PHP ですべての結果を調べることができましたが、より効率的なものを探しています。
何か案は?
この例を考えてみましょう。
これらの 4 つのボール (2,4,5,10) のうち少なくとも 3 つを組み合わせたすべての結果を一致させたいとします。
私たちはこのようにそれを行うことができます...
SELECT * FROM lottery;
+----+-------+-------+-------+-------+
| id | ball1 | ball2 | ball3 | ball4 |
+----+-------+-------+-------+-------+
| 1 | 2 | 5 | 10 | 4 |
| 2 | 5 | 9 | 4 | 1 |
| 3 | 3 | 6 | 4 | 9 |
| 4 | 4 | 8 | 2 | 3 |
| 5 | 8 | 9 | 4 | 10 |
| 6 | 9 | 2 | 1 | 3 |
| 7 | 2 | 3 | 7 | 8 |
| 8 | 3 | 8 | 2 | 6 |
| 9 | 2 | 5 | 1 | 10 |
| 10 | 3 | 2 | 9 | 5 |
+----+-------+-------+-------+-------+
SELECT id
, GROUP_CONCAT(ball ORDER BY ball) balls
FROM
( SELECT id,ball1 ball FROM lottery
UNION
SELECT id,ball2 ball FROM lottery
UNION
SELECT id,ball3 ball FROM lottery
UNION
SELECT id,ball4 ball FROM lottery
) x
WHERE ball IN (2,5,10,4)
GROUP
BY id
HAVING COUNT(*) >= 3;
+----+----------+
| id | balls |
+----+----------+
| 1 | 2,4,5,10 |
| 9 | 2,5,10 |
+----+----------+