2

当選番号に対して宝くじのリストを検索するための MySQL のみのソリューションを探しています。

ball1、ball2、ball3、ball4 の 4 つの数字がそれぞれの列にあるチケットの行があります。これらは、必ずしも昇順であるとは限りません。

クエリは、さらに PHP を処理するために行を返すだけです。

PHP ですべての結果を調べることができましたが、より効率的なものを探しています。

何か案は?

4

1 に答える 1

2

この例を考えてみましょう。

これらの 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   |
+----+----------+
于 2013-01-23T12:54:26.300 に答える