0 Пользователей и 1 Гость просматривают эту тему.
  • 12 Ответов
  • 1699 Просмотров
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Фильтр по дате
« : 06.07.2015, 12:01:59 »
Добрый день!
Хочу сделать фильтр по дате!
Написал запрос:
$dateFilterOUT = strtotime($dateFilterOUT);
$data_array = $db->setQuery("SELECT * FROM #__sr_reservations WHERE (created_by = $userid) AND (created_date >= $dateFilterIn) ORDER BY ID DESC")->loadObjectList();

Есть дата 07.06.2015
$dateFilterOUT = 07.06.2015
я преобразую в формат даты
$dateFilterOUT = strtotime($dateFilterOUT);
Далее хочу получить все записи у которых поле created_date (в формате datetime) выше данной даты. Но ничего не происходит выдаются данные за весь период. Подскажите, я не профессионал, в чем может быть проблема?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Фильтр по дате
« Ответ #1 : 06.07.2015, 12:18:47 »
1. Вы пробовали сделать echo текста вашего запроса?
2. В created_date  дата хранится в UNIX формате или все же формат даты: ГГГГ-ММ-ДД ЧЧ:ММ:СС? если в том что я написал то вы пытаетесь сравнить юникс дату с обычной, а юникс дата это просто число например текущее время это такая цифра - 1436174274 )!
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Re: Фильтр по дате
« Ответ #2 : 06.07.2015, 12:36:09 »
В created_date  дата хранится в 0000-00-00 00:00:00. Я так понимаю $dateFilterOUT в UNIX формате, т.е. мне нужно перевести created_date в UNIX?
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Re: Фильтр по дате
« Ответ #3 : 06.07.2015, 12:46:03 »
Сделал следующее:
$dateFilterIn = date("Y-m-d H:i:s", strtotime($dateFilterIn));

Но тогда выдает ошибку:
#1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '00:00:00) ORDER BY ID DESC' at line 1 SQL=SELECT * FROM gx26f_sr_reservations WHERE (created_by = 321) AND (created_date >= 2015-06-07 00:00:00) ORDER BY ID DESC
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Re: Фильтр по дате
« Ответ #4 : 06.07.2015, 12:49:45 »
echo делал.
Значит если без сравнения дат, то выдает полную таблицу за весь период
Вставляю сравнение дат, опять выдает всю таблицу за полный период
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Фильтр по дате
« Ответ #5 : 06.07.2015, 12:50:41 »
сделайте экранирование кавычек в запросе
Код: php
$data_array = $db->setQuery("SELECT * FROM #__sr_reservations WHERE (created_by = $userid) AND (created_date >= mysql_real_escape_string($dateFilterIn)) ORDER BY ID DESC")->loadObjectList();
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: Фильтр по дате
« Ответ #6 : 06.07.2015, 13:04:22 »
Где инициализация $dateFilterIn? С чем сравниваете?
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Re: Фильтр по дате
« Ответ #7 : 06.07.2015, 13:20:07 »
 
$dateFilterIn = strtotime($dateFilterIn);
$data_array = $db->setQuery("SELECT * FROM #__sr_reservations WHERE (created_by = $userid) AND (created_date >= mysql_real_escape_string($dateFilterIn)) ORDER BY ID DESC")->loadObjectList();

выдает ошибку:
#1305 FUNCTION bron.mysql_real_escape_string does not exist SQL=SELECT * FROM gx26f_sr_reservations WHERE (created_by = 321) AND (created_date >= mysql_real_escape_string(1430168400)) ORDER BY ID DESC

Если
$dateFilterIn = date("Y-m-d h:i:s", strtotime($dateFilterIn));
$data_array = $db->setQuery("SELECT * FROM #__sr_reservations WHERE (created_by = $userid) AND (created_date >= mysql_real_escape_string($dateFilterIn)) ORDER BY ID DESC")->loadObjectList();

выдает ошибку:
#1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '12:00:00)) ORDER BY ID DESC' at line 1 SQL=SELECT * FROM gx26f_sr_reservations WHERE (created_by = 321) AND (created_date >= mysql_real_escape_string(2015-03-30 12:00:00)) ORDER BY ID DESC
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: Фильтр по дате
« Ответ #8 : 06.07.2015, 13:45:22 »
Ну так попробуйте.
Код: php
$dateFilterOUT = '07.06.2015';		
$dateFilterOUT = JFactory::getDate($dateFilterOUT);
$data_array = $db->setQuery("SELECT * FROM  #__sr_reservations WHERE (created_by = ".$userid.") AND (created_date >= CONVERT('".$dateFilterOUT->date."', DATETIME)) ORDER BY ID DESC")->loadObjectList();
var_dump($data_array);
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Re: Фильтр по дате
« Ответ #9 : 06.07.2015, 14:12:44 »
Выдает ошибку, скорее всего что-то не нравится с кавычками, но попробовал разные варианты -  все равно ошибка... Так не хочется IF использовать... :(
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Фильтр по дате
« Ответ #10 : 06.07.2015, 14:21:59 »
Код: php-brief
$dateFilterIn=date('Y-m-d H:i:s',strtotime($dateFilterIn));
$data_array=$db->setQuery('SELECT * FROM #__sr_reservations WHERE (created_by="'.$userid.'") AND (created_date>="'.$dateFilterIn.'") ORDER BY ID DESC')->loadObjectList();
Не будь паразитом, сделай что-нибудь самостоятельно!
*

SimonovSergey

  • Захожу иногда
  • 55
  • 0 / 0
Re: Фильтр по дате
« Ответ #11 : 06.07.2015, 14:31:29 »
Всем спасибо! Разобрался, просто ступил!
в запросе надо было '$dateFilterIn' в кавычки поставить...
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Фильтр по дате
« Ответ #12 : 07.07.2015, 00:12:10 »
а я ведь еде давно говорил про кавычки, это первый момент, о котором надо думать при запросах
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[решено] Использование model - setState для фильтра по дате

Автор effrit

Ответов: 8
Просмотров: 1449
Последний ответ 13.10.2018, 19:13:49
от effrit
Сделать фильтр статей для модуля последние новости

Автор voron121

Ответов: 8
Просмотров: 1809
Последний ответ 27.10.2015, 10:03:17
от Aleks.Denezh
Написать фильтр материалов

Автор Mick_20

Ответов: 2
Просмотров: 1538
Последний ответ 15.07.2014, 12:40:21
от Mick_20