SQL查询如何匹配4个结果中的3个

时间:2013-10-30 00:23:30

标签: php mysql sql

我搜索了许多不同的项目,但我没有找到任何答案。机会是我只是不知道如何正确地说出来。

无论如何,我已经在PHP / SQL中建立了一个系统,可以瞬间扫描数千个结果。每个数据条目有4个数字,它可以轻松扫描匹配所有这4个数字的条目。我想要实现的是让脚本在数据库中搜索与4个条目中的3个条目完全匹配而另一个条目不正确的条目,有点像抽奖。

For example, we have the entries:
Steve - 1, 4, 10, 13
Bill - 3, 4, 10, 13
Tom - 1, 17, 20, 39
Jill - 1, 4, 13, 21
Jane - 5, 10, 13, 18

现在,我会根据结果1,4,10,13扫描,并希望返回以下结果,因为这些匹配4个条目中的3个:

Bill - 3, 4, 10, 13
Jill - 1, 4, 13, 21

我将如何实现这一目标?

非常感谢

编辑:抱歉,表格有结构     名称 - Number1 - Number2 - Number3 - Number4

所以是的,存储为单独的字段

1 个答案:

答案 0 :(得分:8)

您可以通过计算匹配并将其设置为3来实现此目的:

select t.*
from t
where (val1 in (1, 4, 10, 13) +
       val2 in (1, 4, 10, 13) +
       val3 in (1, 4, 10, 13) +
       val4 in (1, 4, 10, 13)
      ) = 3;

在MySQL中,TRUE布尔表达式的计算结果为1。您可以将这些添加在一起以获得匹配数。