#mysql
#MySQL
Вопрос:
Я пытаюсь запустить запрос, который выбирает всех пользователей, которые не входили в систему в течение двух месяцев ( last_access
), insert_date
не в течение двух месяцев с сегодняшнего дня и status
не 2.
last_access
И insert_date
являются обоими datetime
.
Это код, который у меня есть;
SELECT *
FROM `wp_SDzEBA_pc_users`
WHERE `last_access` NOT BETWEEN NOW() - INTERVAL 2 MONTH AND NOW()
AND `insert_date` NOT BETWEEN NOW() - INTERVAL 2 MONTH AND NOW()
AND `status` <> 2
Но, похоже, он по-прежнему выбирает пользователей, которые вошли в систему в течение двухмесячного периода.
Что я делаю не так?
Комментарии:
1. Ваш код должен работать. Пожалуйста, предоставьте образцы данных, текущие и желаемые результаты в виде табличного текста.
2. Пример даты, которую он возвращает в запросе
2020-10-17 10:51:00
, — может быть, мне нужно как-то сделать NOW() 1 день, потому что может быть разница между датой сервера? @GMB3. Я думаю
NOW() INTERVAL 1 DAY
, что проблема действительно устранена
Ответ №1:
Я бы не стал использовать between
для этого. Одно условие неравенства кажется более подходящим:
SELECT *
FROM `wp_SDzEBA_pc_users`
WHERE
`last_access` < NOW() - INTERVAL 2 MONTH
AND `insert_date` < NOW() - INTERVAL 2 MONTH
AND `status` <> 2
В основном это дает пользователям, которые не подключались в течение последних двух месяцев, и которые были вставлены более двух месяцев назад.
Возможно, вы также захотите обрабатывать пользователей, которые никогда не подключались (я бы предположил, что last_access
это будет null
в этом случае):
SELECT *
FROM `wp_SDzEBA_pc_users`
WHERE
(`last_access` IS NULL OR `last_access` < NOW() - INTERVAL 2 MONTH)
AND `insert_date` < NOW() - INTERVAL 2 MONTH
AND `status` <> 2