gpt4 book ai didi

php - 匹配数据库表中的任意一组字段

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:41 26 4
gpt4 key购买 nike

我正在为我的应用程序使用 CakePHP 2.1.3。我有以下条件要匹配:

“从给定的 4 个字段中找出与任意 3 个字段匹配的记录。”

这 4 个字段是 first_namelast_namedobfather_name。我想找到与上面给定的 4 个字段中的任何 3 个匹配的那些记录。

执行此操作的 sql 查询是什么?如果可能的话,我如何在 CakePHP 中使用模型来做到这一点。提前致谢。

最佳答案

如果我很好地理解你的问题,你的主要问题似乎是性能。要提高性能,您必须减少 if(value1==value2)

的数量
   array('OR'=>array(
array( "AND" => array (
"Model.first_name" =>$val1 ,
"Model.last_name" =>$val2 ,
"Model.DOB" =>$val3 ,
),
array( "AND" => array (
"Model.last_name" =>$val2 ,
"Model.DOB" =>$val3 ,
"Model.father_name" =>$val4 ,
),
array( "AND" => array (
"Model.DOB" =>$val3 ,
"Model.father_name" =>$val4 ,
"Model.first_name" =>$val1 ,
),
array( "AND" => array (
"Model.father_name" =>$val4 ,
"Model.first_name" =>$val1 ,
"Model.last_name" =>$val2 ,
),

)

此解决方案进行 12n 次测试。

我建议你做一个子查询:

-第一个取匹配四个字段中任意一个的记录

-然后对返回的结果运行上述查询

如果名字有很大的可变性,这看起来是可信的,那么第一个查询将删除大部分数据,使您的查询进行 4n 次多一点的测试。

如果数据高度同质化(每个人都有相同的名字),您可以查找 1 个字段,然后是 2 个,然后是 3 个。

用另一种解决方案编辑:

我想“dob”代表出生日期。在 150000 人中平均分配 Dot 似乎是合乎逻辑的。

所以我做了一个测试,看看是否 Model.dot==value。那么我们有两种可能:

它返回 true:我们必须检查其他三个字段以查看是否至少有 2 个匹配

它返回 false:我们必须检查剩下的三个是否完全匹配。

第一个子集很小,因此在性能方面无关紧要。第二个将只需要每条记录进行 4 次测试,而不是之前的情况下的 12 次。

关于php - 匹配数据库表中的任意一组字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com