如何通过一定数量的类似数据选择行

时间:2014-10-11 18:04:53

标签: mysql sql where approximation

我即将构建某种功能或查询,我可以检查数据库中是否已存在某条记录。以下规则适用:

  • 该表有6列
  • 我尚未构建的查询可以访问完整的行对象(所有6个值)
  • 此查询应该从我传递的对象
  • 中找到每个至少有6个对应值中的4个行
  • 使用MySQL

甚至可以构建这样的查询吗?我的目标是拥有一个可以返回true的函数,如果它喜欢传递的对象的行已经存在于数据库中。

我唯一的选择是使用多个where-statements进行查询(我为每个组合尝试 4个不同的值)?

伪:

function getSimilarRow(Row_Object $row)
{
    //select *
    //from table_x
    //where 4 out of 6 properties from object $row apply
}

1 个答案:

答案 0 :(得分:1)

您可以在where子句中为您尝试匹配的每个属性使用case statement。如果它符合标准,则给case语句赋值1;如果没有,那么给它0。案件的总和应为>= 4

select * from SomeTable where 
(case when propertyOne = 'value1' then 1 else 0 end) +
(case when propertyTwo = 'value2' then 1 else 0 end) +
(case when propertyThree = 'value3' then 1 else 0 end) +
(case when propertyFour = 'value4' then 1 else 0 end) +
(case when propertyFive = 'value5' then 1 else 0 end) +
(case when propertySix = 'value6' then 1 else 0 end) >= 4

显然,如果您希望它们是like或其他任何内容,您可以更改每个子句中的逻辑。如果您需要真正有创意,您甚至可以使用1之外的其他内容对每列进行加权。