Я пытаюсь получить данные из таблицы с типом данных varchar, но мне нужно выбрать последние 2 дня, используя предложение where по дате.
Вот я попробовал по этой ссылке:
$query = $this
->db
->select('*, COUNT(*) as cnt')
->where('STR_TO_DATE(created_at,"%d-%m-%Y") >=', '(CURDATE() - INTERVAL 2 DAY)')
->group_by('client')
->order_by('cnt', 'DESC')
->get('histprob');
Но результат показывает все данные на моей таблице, а не только два дня прошло. Моя колонка create_at показывается как: 06-02-2019 23:00
Сначала сделайте дату для сравнения в соответствии с вашей колонкой базы данных "creation_at" = "06-02-2019 23:00"
$compare = date('d-m-Y G:i', strtotime('-2 days'));
Затем внесите изменения в пункт where, как показано ниже.
->where('created_at >=',$compare);
where('STR_TO_DATE(created_at,"%d-%m-%Y") >=', $compare)
но показывает все данные в таблице.
Согласно вашему комментарию @Viren answe не работает с разными месяцами, поэтому вы также можете попробовать вот так:
$currentDate = date('d-m-Y G:i');
$twoDaysOld = date('d-m-Y G:i', strtotime('-2 days'));
->where('created_at >=',$twoDaysOld); // greator equal to old date
->where('created_at <=',$currentDate); // less then and equal to current date
Здесь я диапазон дат между двумя датами.
Я решил, преобразуя created_at
на сегодняшний день, то сравнил его с $ сравнить, как было предложено Viren Panchal но изменил формат даты "ДМГ" до "ГМД", как Марк Бейкер отвечает на сравните даты не работают также конвертируются created_at
с помощью STR_TO_DATE. Вот мой законченный код:
$date7 = date('Y-m-d', strtotime('-7 days'));
$query = $this->db->select('*, COUNT(*) as cnt')->where('STR_TO_DATE(created_at,"%d-%m-%Y") >=', $date7)->group_by('client')->order_by('cnt', 'DESC')->get('histprob');
Итак, для сравнения даты следует использовать Y md?
group_by
? Кроме того, не могли бы вы показать пример данных, текущие результаты и ожидаемые результаты?