这个让我难过。
我需要能够获取参与消息线索的人的所有电子邮件地址。人们可以通过几种不同的方式向此messageThread添加消息,并且由于人们可以是发件人或接收消息,因此电子邮件地址可能位于不同的列中。
这是一个示例表。
messagesTable
ID | threadKey | fromEmail | toEmail | sentBy | sentTo
1 | ASJHD2 | me@exam.com | you@bob.com | null | null
2 | ASJHD2 | jake@k.com | | null | null
3 | ASJHD2 | | | 55 | 88
我也有Users
表。
ID | username | email
55 | Ike | ike@domain.com
88 | Sam | sam@j.com
现在可以使用ASJHD2
的threadKey获取参与该消息的所有不同电子邮件。请记住,还需要在users表上进行连接。
答案 0 :(得分:2)
首先尝试只收取
等电子邮件SELECT fromEmail
FROM messagesTable
WHERE fromEmail IS NOT NULL
UNION
SELECT toEmail
FROM messagesTable
WHERE toEmail IS NOT NULL
答案 1 :(得分:0)
您需要做的是基本上加入您的用户表,但说明使用任一字段进行连接的条件。然后,根据您要查找的电子邮件地址对结果进行分组。
SELECT * FROM messagesTable AS m
JOIN Users AS u ON u.email = m.fromEmail OR u.email = m.toEmail
WHERE m.threadKey = 'ASJHD2'
GROUP BY u.email;
答案 2 :(得分:0)
只为有兴趣的人。我使用Max回答并添加了Join。这是我最终的最终查询。
SELECT fromEmail as email FROM messages m WHERE fromEmail IS NOT NULL and m.threadKey = "86ec8125-988d-478f-8b1c-8c1a7c3056f5"
UNION SELECT toEmail FROM messages m WHERE toEmail IS NOT NULL and m.threadKey = "86ec8125-988d-478f-8b1c-8c1a7c3056f5"
UNION SELECT email from messages m JOIN acl_users on sentBy = acl_users.id where m.threadKey = "86ec8125-988d-478f-8b1c-8c1a7c3056f5"
UNION SELECT email from messages m JOIN acl_users on sentTo = acl_users.id where m.threadKey = "86ec8125-988d-478f-8b1c-8c1a7c3056f5"