PHP объединяет три таблицы, если данные отсутствуют в одной из них - PullRequest
0 голосов
/ 22 сентября 2011

Я работаю над объединением трех таблиц, но в одной из таблиц никакой информации там не будет, если только пользователь не откроет письмо, которое мы им отправили

В настоящее время я использую этот sql, но, похоже, нетдля корректной работы

SELECT email.senton, customer.*, count(tracker.viewed) as viewed 
FROM email_sent AS email, customer_detail AS customer, email_tracker AS tracker 
WHERE email.customer_id = customer.customer_id 
    AND customer.Email = tracker.emailaddress 
    AND customer.LeadOwnerId = '{$this->userid}'

Это связано с тем, что в таблице email_tracker может отсутствовать информация о клиентах, если только клиент не открыл электронное письмо

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Требуемое поведение - LEFT OUTER JOIN (также известное как LEFT JOIN).Он просто устанавливает значение NULL, если строка не существует в другой таблице.

SELECT email.senton, customer.*, COUNT(tracker.viewed) AS viewed
FROM email_sent AS email
    JOIN customer_detail AS customer USING(customer_id)
    LEFT OUTER JOIN email_tracker AS tracker ON customer.Email = tracker.emailaddress
WHERE customer.LeadOwnerId = '{$this->userid}'

PS: Как правило, лучше использовать JOIN s вместодекартового произведения (что вы сделали с ,).

1 голос
/ 22 сентября 2011

Попробуйте это:

SELECT email.senton, customer.*, COUNT(tracker.viewed) as viewed 
FROM email_sent email INNER JOIN customer_detail customer
    ON email.customer_id = customer.customer_id
LEFT JOIN email_tracker tracker 
    ON customer.Email = tracker.emailaddress
WHERE customer.LeadOwnerId = '{$this->userid}'

Предложение LEFT JOIN используется, чтобы всегда получать столбцы в левой части и столбцы в правой части, если они существуют в соединении ...

отредактировано согласно вашему комментарию:
Попробуйте изменить COUNT(tracker.viewed) деталь с

CASE
    WHEN tracker.emailaddress IS NOT NULL THEN COUNT(tracker.viewed)
    ELSE 0
END
    as viewed 

Я не уверен, что это работает, я не могу проверить это, но попробуйте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...