Как найти все даты между двумя датами в Zend Framework Query - PullRequest
4 голосов
/ 15 февраля 2012

Мне нужно найти все даты между двумя датами; это дата начала и дата окончания. Вот мой запрос, но он не делает то, что мне нужно.

В моей таблице есть имя столбца date_created в таком формате, как этот 2011-06-09 06:41:10. Я хочу удалить эту часть 06:41:10, поэтому я применяю

DATE(date_created)

После этого, поскольку мой указатель даты находится в этом формате 02/07/2012, я меняю формат с помощью DATE_FORMAT().

$start_date and $end_date мои переменные для сравнения и в формате 02/07/2012

$select = $DB->select()
->from('sms', array(
    'sms_id',
    'sms_body',
    'sms_sender',
    'sms_recipient',
    'date_created',
    'sms_type'))
->where('phone_service_id = ?', $phone_service_id)
->where("DATE_FORMAT(DATE(date_created), '%m/%d/%Y') >= ?",  $start_date)
->where("DATE_FORMAT(DATE(date_created), '%m/%d/%Y') <= ?",  $end_date)
->order("".$option_call_log." ".$option_call_log_asc_desc);

Чего мне не хватает в запросе? Почему не сравниваются $ start_date и $ end_date?
Забудьте о $option_call_log и $option_call_log_asc_desc.

Ответы [ 2 ]

9 голосов
/ 15 февраля 2012

Если ваши даты проходят в формате ММ / ДД / ГГГГ, то вместо того, чтобы заставить MySQL выполнять всю работу, я бы преобразовал их в ГГГГ-ММ-ДД ЧЧ: II: SS в PHP, что позволяет вамсделать простой запрос на основе диапазона в MySQL.Итак:

$start_date_formatted = date('Y-m-d', strtotime($start_date)).' 00:00:00';          
$end_date_formatted = date('Y-m-d', strtotime($end_date)).' 00:00:00';

$select = $DB->select()
    ->from('sms', array('sms_id','sms_body','sms_sender','sms_recipient','date_created','sms_type'))
    ->where('phone_service_id = ?', $phone_service_id)
    ->where("date_created >= ?",  $start_date_formatted)
    ->where("date_created <= ?",  $end_date_formatted)
    ->order("".$option_call_log." ".$option_call_log_asc_desc)
    ;

(Если даты в вашем средстве выбора даты на самом деле в формате ДД / ММ / ГГГГ, то все немного сложнее.)

1 голос
/ 12 декабря 2013

обновление часов изменения, чтобы включить последний день $ end_date_formatted = date ('Y-m-d', strtotime ($ end_date)). ' 23:59:59' ;

...