Выберите строки из таблицы MySQL, где временная метка PHP старше X

У меня есть таблица пользователей, где пользователи должны быть одобрены, я хочу показать пользователям, которые не одобрены и зарегистрированы более 7 дней назад.

Моя user_regdate – это временная метка, созданная с помощью функции php time ().

Это то, что я пытаюсь, это не работает:

mysql_query("select * from users WHERE user_regdate < now() - interval 7 day AND approved='0' order by id;"); 

благодаря

Временные метки PHP являются простым целым числом, тогда как MySQL now() возвращает значение datetime. Скорее всего, это исправит запрос:

 SELECT ... WHERE user_regdate < unix_timestamp(now() - interval 7 day)) ... 

В принципе, без вызова unix_timstamp () вы сравниваете яблоки и апельсины.

Примитивное решение в лучшем случае, но не самое лучшее при вычислении времени MySQL

 $timestamp = strtotime("-7 days"); mysql_query("SELECT * FROM users WHERE user_regdate < $timestamp AND approved = 0 ORDER BY id"); 

Функция php time () выводит временную метку unix (количество секунд с 1 января 1970 года). Функция MySQL now () выводит отформатированную дату (например, 2011-6-9 12:45:34) … поэтому я не думаю, что вы можете сравнить их так.

Попробуйте использовать временную метку unix, минус 7 дней, а не now () в вашем запросе:

  $7_days_ago = time() - (7 * 24 * 60 * 60); mysql_query("select * from users WHERE user_regdate <" . $7_days_ago . " AND approved='0' order by id;"); 

Попробуй это;

 select * from users WHERE DATE_SUB(user_regdate,INTERVAL 7 DAY) AND approved='0' order by id;