[英]PHP join three tables when if the data is not in one of them
我正在努力将三个表连接在一起,但在其中一个表中没有信息将在那里,除非用户打开我们发送给他们的电子邮件
我目前正在使用这个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可能没有客户信息,除非客户已打开电子邮件
尝试这个:
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
我不确定它是否有效,我无法测试它,但试一试
您需要的行为是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
!而非笛卡尔积的(你做了什么,
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.