Задача: фильтровать записи по времени. Пример: получить записи с 12:00 до 20:00 часов
Что я сделал:
Написал custom filter handler в нем вот такой код
<?php function query() {
dpm($this->query );
$join = new views_join();
$join->table = 'field_data_field_data_and_time';
$join->field = 'entity_id';
$join->left_table = 'node';
$join->left_field = 'nid';
$join->type = 'left';
$this->query->add_relationship('field_data_field_data_and_time', $join, 'node');
$this->query->add_where(1, 'HOUR(from_unixtime(field_data_field_data_and_time.field_data_and_time_value))', "20", '>'); // HOUR(from_unixtime съедаются скобки и получается ошибка
/*
*
* SET time_zone= 'europe/moscow';
*
* SELECT HOUR(from_unixtime(`field_data_and_time_value`)) as hour, minute(from_unixtime(`field_data_and_time_value`)), `entity_id` as nid
* FROM `field_data_field_data_and_time`
* WHERE HOUR(from_unixtime(`field_data_and_time_value`))*60+minute(from_unixtime(`field_data_and_time_value`)) between 18*60 and 22*60 ;
*
*/
}?>
но проблема в том что я не могу использовать sql функции HOUR from_unixtime чтоб с конвертировать дату в запросе(скобки съедаются)
и не знаю как выполнить between.
sql который я хотел получить в комментариях к коду
Буду благодарен за любую помощь
Комментарии
забыл написать что поле формата Date (Unix timestamp)
Поле добавлено с помощью модуля Date? Перепроверьте ещё раз все форматы и примите к сведению, что timestamp в php и в sql записываются совершенно по-разному.
Немного о датах, чтоб проблем с часовыми поясами не было и конвертацией, использовал такой треш
HOUR(CONVERT_TZ(from_unixtime(field_data_field_data_and_time.field_data_and_time_value),\'UTC\', \'Europe/Moscow\'))
Решение с тем что $this->query->add_where съедает скобки, надо использовать $this->query->add_where_expression(1, $sql) проблема с between тоже снимается.