2013-01-23 49 views
2

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

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

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

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

任何想法?

+0

没有什么,因为我能立即想到的唯一解决方案就是大量的MySQL搜索,比较所有球列与所有结果数字......例如WHERE(ball1 = [result1]或ball1 = [result2]或ball1 = [result3] ...' 我希望有一些更优雅的东西 – chrismcb

+0

你是否坚持这个模式?一个'(drawId,ballValue)'(也可以是'ball如果保留这些信息,编号会更容易处理。 – eggyal

+0

只有存储了票据,结果是手动输入的。但是,是的,我坚持这一点,因为它是一个已经存在的系统 - 只需要一个自动检查器“。不需要存储哪个球号码 - 只需要按照任意顺序匹配4个结果号码的4个票号。 – chrismcb

回答

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 | 
+----+----------+ 
+0

优秀@Strawberry - 完全是我以后的优雅解决方案 - 全部都在MySQL中! – chrismcb