我在php中使用mysql根据某些条件通过电子邮件向客户发送提醒电子邮件,如果唯一客户的ca帐户处于活动状态= 0,则某些客户拥有多个ca帐户,则它仅应返回结果并向客户发送电子邮件,这样我active = 0,active = 1,其成员资格
我尝试了下面的SQL,该SQL返回3个结果Billy&Daniel是正确的,它们只具有active = 0,所以应该出现Becky的2个CA帐户同时具有active = 0和active = 1,因此SQL应该查看她的查询并意识到“没有贝基有活跃= 1”,所以不应该出现。这只比利,丹尼尔才归还。
SELECT
u.id,
u.forename,
u.surname,
u.email,
m.password,
m.user_id,
m.active,
m.promotional_code
FROM
user u
LEFT JOIN ca_accounts c ON u.id = c.user_id
LEFT JOIN member m ON u.id = m.user_id
WHERE
u.active = 1 AND m.active = 1
AND m.group_id IN (26)
AND (from_unixtime(m.end_date) > NOW()
AND from_unixtime(m.end_date) < DATE_ADD(NOW(), INTERVAL 1 DAY))
AND c.active = 0
LIMIT 0, 25
产量:
id forename surname email password user_id active
2923 Billy billy@ NULL 2923 1
4763 Daniel daniel@ NULL 4763 1
781 Beckly becky@ NULL 781 1
它应该产生什么:
id forename surname email password user_id active
2923 Billy billy@ NULL 2923 1
4763 Daniel daniel@ NULL 4763 1
根据您提供的信息,问题似乎出在table上ca_accounts
,其中多行属于同一用户,并且active
(0
和1
)的值不同。
为了解决这个问题,您可以在子句中将JOIN
onca_accounts
转换为NOT EXISTS
ondition WHERE
,并使用相关的子查询来确保给定用户没有ca_accounts
与之相关的记录active = 1
。
SELECT
u.id,
u.forename,
u.surname,
u.email,
m.password,
m.user_id,
m.active,
m.promotional_code
FROM
user u
LEFT JOIN member m ON u.id = m.user_id
WHERE
u.active = 1 AND m.active = 1
AND m.group_id IN (26)
AND (from_unixtime(m.end_date) > NOW()
AND from_unixtime(m.end_date) < DATE_ADD(NOW(), INTERVAL 1 DAY))
AND NOT EXISTS (
SELECT 1
FROM ca_accounts c
WHERE u.id = c.user_id AND c.active = 1
)
LIMIT 0, 25
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句