MySQL彩票搜索

时间:2013-01-23 11:52:40

标签: mysql search

我正在寻找一种仅限MySQL的解决方案,可根据抽取的数字搜索彩票清单。

我有自己的列中各有四个数字的票数:ball1,ball2,ball3,ball4。 这些不一定按升序排列。

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

我可以在PHP中查看所有结果,但我正在寻找更有效的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

考虑这个例子。

假设我们想要匹配这四个球中至少有三个组合的所有结果(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   |
+----+----------+