Как получить последнюю запись по дате, но тип данных varchar - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь извлечь данные из таблицы с типом данных 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');

Но результат показывает все данные в моей таблице, а не только два дня прошло.Мой созданный столбец показан как: 06-02-2019 23:00

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Я решил преобразовать created_at в дату, затем сравнил ее с $ сравнить , как предложено Viren Panchal , но изменил формат даты с 'dmY' на 'Ymd' как Марк Бейкер в ответах сравнивает неработающие даты также конвертировал 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?

0 голосов
/ 07 февраля 2019

Согласно вашему комментарию @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

Здесь я - диапазон дат между двумя датами.

0 голосов
/ 06 февраля 2019

Сначала создайте переменную даты для сравнения согласно столбцу базы данных "created_at"="06-02-2019 23:00"

$compare = date('d-m-Y G:i', strtotime('-2 days'));

Затем внесите изменения в предложение where, как показано ниже.

->where('created_at >=',$compare);
...