2012-04-04 1 views
1

У меня есть простой запрос:MySQL Interval - привлечь пользователей, которые не вошли в течение 6 месяцев

$query1="SELECT * FROM wp_users WHERE now() < (last_login + INTERVAL 6 month)"; 
$result1=mysql_query($query1) or die(mysql_error()); 

while($rows=mysql_fetch_array($result1)){ 

    $inactive_accounts[] = $rows['ID']; 
} 

Я хочу это тянуть во всех User_ID-х людей, которые не вошли в свою учетную запись в течение 6 месяцев , Я установил это так, когда они вошли в систему, он отправляет datetime в столбец last_Login.

Мне просто интересно, был ли этот запрос SELECT в порядке, поскольку у меня возникают проблемы с его тестированием. Будет ли это показывать идентификаторы людей, которые не вошли в систему в течение 6 месяцев?

Спасибо!

ответ

4

Вы находитесь на правильных линиях. То, что вы, вероятно, нужно что-то вроде DATE_SUB функции в MySQL, так

SELECT * 
FROM wp_users 
WHERE last_login < DATE_SUB(NOW(), INTERVAL 6 MONTH) 
+1

Это лучший способ сделать это. Обратите внимание, что настройка '6 MONTH' сделана для' NOW() ', а не' last_login'. Это означает, что оптимизатор может использовать индекс, который имеет last_login в качестве первого или единственного поля. – nnichols

+0

@nnichols Спасибо, что подобрали опечатку. – liquorvicar

3
SELECT * FROM wp_users WHERE last_login < date_sub(now(), INTERVAL 6 month) 
+0

Почему это лучше? –

+0

Я думаю, что это проще читать и более ясно, каково намерение. – fancyPants

+0

Хорошо, я вижу, но мой способ все еще работает? – JamesG

0

Чтобы проверить, что ваш код работает, вручную настроить last_login поле пользователя и установить его в> 6 месяцев назад. Конечно, в вашей среде разработки!

Смежные вопросы