У меня есть 2 таблицы, 1 таблица пользователей и таблица, в которой
исходящие электронные письма стоят в очереди.Я хочу выбрать пользователей
, которые не находятся в сети в течение определенного времени
, и отправить им электронное письмо.Я также хочу, чтобы, если они
уже получили такое письмо за последние 7 дней
или получили запланированное письмо на следующие 7 дней,
они не были выбраны.
У меня есть 2 запроса, и я думаю, что было бы замечательно, если бы
они работали с подзапросами.
Как область, в которой я не являюсь экспертом, я бы
хотел бы пригласить вас либо
- Создать подзапрос второго запроса
- Сделайте JOIN и исключите результаты второго запроса.
Я был бы гораздо более счастлив, чем счастлив :)
Спасибо, что прочитали
SELECT
`user_id`
FROM
`user`
WHERE
DATEDIFF( CURRENT_DATE(), date_seen ) >= 7
Результаты второго запроса должны быть исключены
из запроса выше.
SELECT
`mail_queue_id`,
`mail_id`,
`user_id`,
`status`,
`date_scheduled`,
`date_processed`
FROM
`mail_queue`
WHERE
(
DATEDIFF( CURRENT_DATE(), date_scheduled ) >= 7
OR
DATEDIFF( date_scheduled, CURRENT_DATE() ) <= 7
)
AND
(
`mail_id` = 'inactive_week'
AND
(
`status` = 'AWAITING'
OR
`status` = 'DELIVERED'
)
)
РЕШЕНИЕ
SELECT
`user_id`
FROM
`user` as T1
WHERE
DATEDIFF( CURRENT_DATE(), date_seen ) >= 7
AND NOT EXISTS
(
SELECT
`user_id`
FROM
`mail_queue` as T2
WHERE
T2.`user_id` = T1.`user_id`
AND
(
DATEDIFF( CURRENT_DATE(), date_scheduled ) >= 7
OR
DATEDIFF( date_scheduled, CURRENT_DATE() ) <= 7
AND
(
`mail_id` = 'inactive_week'
AND
(
`status` = 'AWAITING'
OR
`status` = 'DELIVERED'
)
)
)
)