推进组合IN和LIKE查询

时间:2014-03-06 04:07:30

标签: php sql propel

我有这段代码来选择日期在$ date_to_search_string中的所有记录 这只是一个带逗号分隔字符串的变量。

客户希望在我的查询应该是现在的日期上添加时间 IN('03 /二千○十四分之一%”, '2014年3月2日%',等等。) 我如何用propel实现这种查询?(新手推进用户)。

我总是可以这样做:

  WHERE initial_interview_date LIKE '03/1/2014%' OR
        initial_final_date LIKE '03/12014%' OR 
        initial_interview_date LIKE '03/2/2014%' OR
        initial_final_date LIKE '03/2/2014%' OR 
  etc..

但要做我想做的事情可能有点矫枉过正, 也许还有别的办法。

代码:

    $date_to_search_string = implode(",",$date_to_search);

    /* $date_to_search_string:
      string ''03/1/2014','03/2/2014','03/3/2014','03/4/2014','03/5/2014'...
    ***/

    $events = ApplicantDetailsQuery::create()
        ->where("initial_interview_date IN (".$date_to_search_string.") OR final_interview_date IN (".$date_to_search_string.")")
        ->find();

    $events_ii = array();
    $events_fi = array();

    foreach($events as $event) {
        $events_ii[$event->getInitialInterviewDate()][] = $event;
        $events_fi[$event->getFinalInterviewDate()][] = $event;
    }

1 个答案:

答案 0 :(得分:1)

您可以使用SQL DATE命令并保持代码相同。

例如:

WHERE DATE(initial_interview_date) IN ('03/1/2014', '03/2/2014') OR
    DATE(initial_final_date) IN ('03/1/2014', '03/2/2014')  OR 

在Propel中:

$events = ApplicantDetailsQuery::create()
    ->where("DATE(initial_interview_date) IN ?", $arrayOfDates)
    ->orwhere("DATE(final_interview_date) IN ?", $arrayOfDates)
    ->find();