#php #sql
#php #sql
Вопрос:
У меня проблема. Возможно, этот вопрос очень глупый, но я искал везде и не получил то, что я хочу. Я немедленно удалю свой пост, если получу ответ.
У меня есть таблица, подобная этой:
ID | Title | Date
-----------------------------
1 | AAA | 2019-03-25
2 | BBB | 2019-03-21
3 | CCC | 2019-03-23
Я пробовал это:
function get_all() {
$plusdays = strtotime(' 7 day');
$now = date('Y-m-d H:i:s');
$this->datatables->select('*');
$this->datatables->from('atable');
$this->datatables->where('crt_date INTERVAL 7 day >=', $now);
return $this->datatables->generate();
}
Как я могу показать таблицу следующим образом:
ID | Title | Date
-----------------------------
2 | BBB | 2019-03-21
Итак, я хочу показать данные, созданные на определенную дату, срок действия которых истекает, если прошло более 7 дней после создания данных. Или есть другие идеи?
должен ли я добавлять столбец с истекшей датой?
Спасибо
Комментарии:
1. НЕ удаляйте свой вопрос сразу после получения ответа. Это не так, как работает StackOverflow. Удаление вашего вопроса лишает человека с похожим (или тем же самым!) вопросом, что и у вас, возможности получить ответ в будущем.
2. Какую базу данных вы используете? mysql? oracle? sql-сервер?
3. Хорошо, я не буду удалять этот пост немедленно. @Isaiah
4. Я использую базу данных mysql @catcon
5. Почему бы не вычислить
now() - 7 days
как одно постоянное выражение и использовать это вместо потенциального добавления 7 дней к миллионам дат?date 7>=now
эквивалентноdate>=now-7
Ответ №1:
Вот SQL-запрос, который должен сработать (и нет, он не обязательно самый элегантный):
SELECT *
FROM atable
WHERE (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(date)) >= (60 * 60 * 24 * 7);
Я полагаю, вы можете соответствующим образом перевести это в свой PHP-код. В принципе, я получаю разницу в секундах между now () и сохраненной датой, затем я вижу, больше ли разница или равна семи дням.
Комментарии:
1. Хорошо, я попробую в будущем. Спасибо!
Ответ №2:
Я решил добавить еще один столбец — exp_date для упрощения использования в будущем. Код, подобный этому:
$date = time();
$date_exp = date('Y-m-d H:i:s', strtotime(' 7 day', $date));
Спасибо всем!
Ответ №3:
Совет Не используйте функцию или eval в столбце where (проблема с производительностью)
В этом случае вы должны вычесть $ now на 7 дней и
$this->datatables->where('crt_date >=', $theDateBefore7Day);