Как получить последнюю запись по дате, но тип данных varchar

0

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

  • 0
    так у вас есть дата в строке
  • 0
    Какова цель group_by ? Кроме того, не могли бы вы показать пример данных, текущие результаты и ожидаемые результаты?
Показать ещё 4 комментария
Теги:
codeigniter
strtotime

3 ответа

1

Сначала сделайте дату для сравнения в соответствии с вашей колонкой базы данных "creation_at" = "06-02-2019 23:00"

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

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

->where('created_at >=',$compare);
  • 0
    Это работает, но не удалось по сравнению с другим месяцем. Например, при получении данных> = 31-01-2019 (31-01-2019 до 02-02-2019) ничего не будет получено. Спасибо
  • 0
    Я думаю, что это произошло потому, что столбец create_at является строкой, поэтому его нельзя сравнивать с $ сравнивается (дата типа данных) ?? Затем я попытался изменить предложение where на: where('STR_TO_DATE(created_at,"%d-%m-%Y") >=', $compare) но показывает все данные в таблице.
Показать ещё 2 комментария
0

Согласно вашему комментарию @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
    Я сохраняю дату (тип данных DATETIME) в БД в формате "2019-02-05 17:04:58", и она отлично работает для меня в разные месяцы, например, $ compare = date ('Ymd G: i: s', strtotime ('- 20 дней')).
  • 0
    @VirenPanchal: тогда в чем проблема?
Показать ещё 2 комментария
0

Я решил, преобразуя 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?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню