2014-10-11 34 views
1

我即将构建某种函数或查询,我可以检查某个记录是否已经存在于数据库中。以下规则适用:如何通过一定数量的类似数据选择一行

  • 表有6列
  • 我还没有到构建查询可以访问一个完整的行对象(所有6个值)
  • 该查询应该找到每行至少4出从对象6个对应值的我通过
  • 使用MySQL

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

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

伪:

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

请张贴您的代码/伪码。 – 2014-10-11 18:07:41

+0

那里,尽我所能给你 – Flame 2014-10-11 18:17:41

+0

你正在使用哪些DBMS? Postgres的?甲骨文? – 2014-10-11 19:25:32

回答

1

你可以在where子句要尝试匹配每个属性在使用case statement。如果符合标准,则给案例声明1;如果没有,那就给它0。这些案件的总和应该是>= 4

我不认为熟悉的与MySQL,但下面的工作(我敲了一个快速SQL Fiddle显示它的工作):

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 

很明显,你可以,如果你每个子句中改变你的逻辑'd喜欢他们是like或什么。如果您需要非常有创意,您甚至可以通过使用除1以外的其他内容来为每列应用权重。

+0

aight谢谢我所需要的东西。我会使用这些CASE语句来解决它;) – Flame 2014-10-11 22:19:32