我正在寻找一种仅限MySQL的解决方案,可根据抽取的数字搜索彩票清单。
我有自己的列中各有四个数字的票数:ball1,ball2,ball3,ball4。 这些不一定按升序排列。
查询应该只返回行以进行进一步的PHP处理。
我可以在PHP中查看所有结果,但我正在寻找更有效的方法。
有什么想法吗?
答案 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 |
+----+----------+