我的搜索按预期工作,但我有一个额外的因素,我无法解决。
这是我在一个查询中需要实现的细分:
$ ApplicantAge BETWEEN Age.Min_Age和Age.Max_age。 不'PlanDetail.company_id'=> '27'
$ PsSpouseAge BETWEEN Age.Min_Age和Age.Max_age。 WHERE 'PlanDetail.company_id'=> '27'
因此,您可以看到$ ApplicantAge匹配,我需要获取所有没有company_id = 27的记录,然后在$ PsSpouseAge匹配的位置,只获取company_id = 27的记录。
所以所有记录合并在一起......所以基本上同一时间对同一数据有两个查询,然后所有记录合并到结果中。
正如我所说,我的搜索工作正常,但我需要将其整合并整理出我运气不好的MySQL。
我尝试了很多AND / OR AND选项,而我能得到的最接近的是用第二部分覆盖查询的第一部分,这当然没有用。
我现在正在尝试:
'conditions' => array(
'AND' => array(
array($ApplicantAge . ' BETWEEN Age.Min_Age AND Age.Max_age'),
'AND' => array('Zips.title' => $Zip),
'AND' => array('Applicant.amount' => array($comboType, $memberCount)),
'NOT' => array('PlanDetail.company_id' => '27'),
array('OR' =>
array($PsSpouseAge . ' BETWEEN Age.Min_Age AND Age.Max_age'),
'AND' => array('Zips.title' => $Zip),
'AND' => array('Applicant.amount' => array($comboType, $memberCount)),
'AND' => array('PlanDetail.company_id' => '27'))
)),
我的SQL输出是这样的:
WHERE ((19 BETWEEN `Age`.`Min_Age` AND `Age`.`Max_age`) AND (`Applicant`.`amount` IN ('as', '2')) AND (NOT (`PlanDetail`.`company_id` = 27)) AND (((21 BETWEEN `Age`.`Min_Age` AND `Age`.`Max_age`) AND (`PlanDetail`.`company_id` = 27))))
答案 0 :(得分:0)
要理解你在寻找什么有点困难,但也许你想要这个?
([$ApplicantAge] BETWEEN Age.Min_Age AND Age.Max_age AND PlanDetail.company_id != 27) OR ([$PsSpouseAge] BETWEEN Age.Min_Age AND Age.Max_age AND PlanDetail.company_id = 27)
答案 1 :(得分:0)
你问题的简单答案就是使用UNION:
Select 'Applicant', Age
Where $ApplicantAge BETWEEN Age.Min_Age AND Age.Max_age. NOT 'PlanDetail.company_id' <> '27'
Union
Select 'Spouse', Age
Where $PsSpouseAge BETWEEN Age.Min_Age AND Age.Max_age. WHERE 'PlanDetail.company_id' = '27'
但是我认为我们遗漏了申请人与配偶之间关系的一些重要细节。