Как получить Where ‘столбец 7 дней’ >= СЕЙЧАС в PHP

#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);