2

我正在寻找一个 MySQL 唯一的解决方案来搜索彩票列表与绘制的数字。

我有一排票,每列都有四个数字:ball1、ball2、ball3、ball4。这些不一定按数字升序排列。

查询应该只返回行以进行进一步的 PHP 处理。

我可以通过 PHP 中的所有结果,但我正在寻找更有效的东西。

有任何想法吗?

4

1 回答 1

2

考虑这个例子。

假设我们要匹配所有具有这四个球中至少三个的任意组合的结果 (2,4,5,10)

我们可以这样做...

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 回答