2014-03-06 77 views
0

我有這段代碼來選擇所有記錄的日期在$ date_to_search_string 這只是一個變量與逗號分隔的字符串。Propel結合IN和LIKE查詢

客戶想在現在我的查詢應該看起來像 IN('03/1/2014%','03/2/2014%'等等)的日期添加時間 我該如何實現這一點用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; 
    } 
+0

我不喜歡你如何提議'LIKE'上的日期爲字符串。日期列是日期還是字符串?難道你不能將'initial_interview_date'和'final_interview_date'轉換爲比較中使用的日期嗎? – Turophile

+0

客戶端使用datetimepicker添加日期和記錄保存爲字符串,我認爲你是建議我將它轉換爲時間戳/日期並保存它? – Viscocent

+0

是的,如果數據庫中有一個日期(現在是日期+時間)的字符串,則將該列轉換爲WHERE子句中的日期。這將會消失,因此IN部分將與以前一樣工作。 – Turophile

回答

0

可以使用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 

而且在行走:

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