MySQL短暂但高度复杂的结果问题w /两种搜索变体

时间:2011-05-06 03:21:34

标签: mysql sql cakephp

我的搜索按预期工作,但我有一个额外的因素,我无法解决。

这是我在一个查询中需要实现的细分:

$ 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))))

2 个答案:

答案 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'

但是我认为我们遗漏了申请人与配偶之间关系的一些重要细节。