У меня есть таблица пользователей, где пользователи должны быть одобрены, я хочу показать пользователям, которые не одобрены и зарегистрированы более 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;