MySQL彩票搜索
问题描述:
我正在寻找一个MySQL唯一的解决方案来搜索抽奖券列表中的数字绘制。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 |
+----+----------+
+0
优秀@Strawberry - 完全是我以后的优雅解决方案 - 全部都在MySQL中! – chrismcb
没有什么,因为我能立即想到的唯一解决方案就是大量的MySQL搜索,比较所有球列与所有结果数字......例如WHERE(ball1 = [result1]或ball1 = [result2]或ball1 = [result3] ...' 我希望有一些更优雅的东西 – chrismcb
你是否坚持这个模式?一个'(drawId,ballValue)'(也可以是'ball如果保留这些信息,编号会更容易处理。 – eggyal
只有存储了票据,结果是手动输入的。但是,是的,我坚持这一点,因为它是一个已经存在的系统 - 只需要一个自动检查器“。不需要存储哪个球号码 - 只需要按照任意顺序匹配4个结果号码的4个票号。 – chrismcb