2016-10-10 2 views
0

У меня есть сайт с простым PHP-запросом, который возвращает записи из таблицы MYSQL без проблем.Показывать только последние 5 дней записей в php

$query = mysqli_query($connection, "SELECT * FROM $shopname 

Я пытаюсь выяснить, как вернуть только последние 5 дней записей, основанных на поле под названием «дата». Поле даты - тип VARCHAR в mysql. Формат дат в поле даты выглядит так: 9.08.2012 17:52:17. Я попробовал следующий запрос от некоторых исследований, но это ничего не возвращает. Что я делаю не так?

$query = mysqli_query($connection, "SELECT * FROM $shopname WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 5 DAY)"); 

* ВАЖНО - я не могу изменить поле mysql в DATE. Это должен быть VARCHAR.

+0

Пожалуйста, измените тип столбца 'date' в' date'. Затем вы можете использовать функции, предназначенные для использования с датами (а не с символами). –

+0

_Never_ хранить даты в 'varchar'. Вот почему запрос ничего не возвращает. –

+0

Попробуйте использовать 'NOW()' -> 'WHERE date> = DATE_SUB (NOW(), INTERVAL 5 DAY)") 'и измените свой столбец даты на' timestamp' –

ответ

1

Вы можете использовать STR_TO_DATE() здесь VARCHAR формат даты:

Пример:

$query = "SELECT * FROM $shopname 
WHERE DATEDIFF(CURDATE(), STR_TO_DATE(date,'%Y-%m-%d')) < 5"; 

STR_TO_DATE() для DateFormat, будет использовать для сравнения с dateCURDATE().

DATEDIFF() для DateDiff, будет использоваться, чтобы получить разницу между датами между date и current date.

Но, лучше использовать MYSQL Date format, а не VARCHAR.

+0

все еще нет результата –

+0

@MariaNolorbe: его лучше использовать формат DATE или вы также можете управлять им с PHP – devpro

+0

Я хотел бы использовать формат DATE, но я нахожусь во власти CSV-файла, который отформатирован так: 8/9/2016 5:52:17 PM. –

0

Попробуйте это:

SELECT * FROM TABLE t WHERE t.date >= DATE(NOW()) - INTERVAL 5 DAY 

Обеспечьте самое date должно быть, если символ типа, как date

Или еще вы можете использовать этот метод для получения данных за последние 5 дней.

SELECT name,date 
from TABLE 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 5 DAY) AND date <= CURDATE() 
ORDER BY date DESC 
1

при условии, что ваша колонка дата vatchar отформатирован как дд-мм-гггг вы shuold преобразовать в дату таким образом

$query = mysqli_query($connection, 
    " SELECT * 
     FROM $shopname 
     WHERE str_to_date(`date`, '%d-%m-%Y') >= DATE_SUB(CURDATE(), INTERVAL 5 DAY)"); 
0

вы можете использовать этот метод, с помощью MySQL UNIX_TIMESTAMP.this может изменить время для временной метки !

$query = mysqli_query($connection, "SELECT * FROM $shopname WHERE `date` >= UNIX_TIMESTAMP(8/9/2016 5:52:17 PM)"); 
Смежные вопросы