【问题标题】:SQL query how to match 3 out of 4 resultsSQL查询如何匹配4个结果中的3个
【发布时间】:2013-10-30 00:23:29
【问题描述】:

我搜索了许多不同的项目,但没有找到任何答案。可能我只是不知道如何正确表达。

无论如何,我已经在 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

是的,存储为单独的字段

【问题讨论】:

  • 一些表格信息?字段名称?你做了什么尝试?等等……
  • 向我们展示一些架构。这些是字符串吗?即,“Steve”是否有一行与“1,4,10,13”或作为单独的行存储在与人相关的另一个表中?
  • php端的后处理怎么样?

标签: php mysql sql


【解决方案1】:

您可以通过计算匹配并将其设置为 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。您可以将这些加在一起以获得匹配数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多