MySQL короткая, но очень сложная проблема результатов с двумя вариантами поиска - PullRequest
0 голосов
/ 06 мая 2011

Мой поиск работает, как и ожидалось, но у меня есть дополнительный фактор, с которым я не могу разобраться.

Это разбивка того, что мне нужно достичь в одном запросе:

$ ApplicantAge МЕЖДУ Age.Min_Age AND Age.Max_age. НЕ 'PlanDetail.company_id' => '27'

$ PsSpouseAge МЕЖДУ Age.Min_Age AND Age.Max_age. ГДЕ '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 голосов
/ 06 мая 2011

Простой ответ на ваш вопрос - просто используйте 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'

Однако я думаю, что мы упускаем некоторые важные детали в отношениях между заявителем и супругом.

0 голосов
/ 06 мая 2011

Немного трудно понять, что вы ищете, но, возможно, вы хотите этого?

([$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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...