Полностью исключить идентификатор пользователя в результате MySQL, если в таблице найдено значение active = 1 - PullRequest
0 голосов
/ 08 января 2019

Я использую mysql в php, чтобы отправлять клиентам по электронной почте напоминание, основанное на определенных условиях, оно должно возвращать результат и отправлять электронное письмо клиенту только в том случае, если у этого уникального клиента есть активная учетная запись ca = 0, некоторые клиенты имеют более одной учетной записи ca, поэтому будет ли я активным = 0 и активным = 1 для их членства

Я попробовал SQL ниже, который возвращает 3 результата Билли и Даниэль правы, они просто активны = 0, поэтому должны появиться У Бекки есть и активные = 0, и активные = 1 для ее 2-х соответствующих учетных записей, поэтому 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   

изображение идентификатора пользователя 781 с таблицей счетов

1 Ответ

0 голосов
/ 09 января 2019

Из предоставленной вами информации видно, что проблема возникает из таблицы ca_accounts, где несколько строк принадлежат одному пользователю с разными значениями active (0 и 1).

Чтобы решить эту проблему, вы можете преобразовать JOIN on ca_accounts в условие NOT EXISTS в предложении 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...