我正在寻找一个 MySQL 唯一的解决方案来搜索彩票列表与绘制的数字。
我有一排票,每列都有四个数字:ball1、ball2、ball3、ball4。这些不一定按数字升序排列。
查询应该只返回行以进行进一步的 PHP 处理。
我可以通过 PHP 中的所有结果,但我正在寻找更有效的东西。
有任何想法吗?
考虑这个例子。
假设我们要匹配所有具有这四个球中至少三个的任意组合的结果 (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 |
+----+----------+