2011-04-11 197 views
1

我想要根据CASE结果来加入表格。基本上,我想检查我是否是发件人,如果不是,我想从用户数据库中检索发件人的姓名。如果我是发件人,我想从users表中检索收件人姓名。在一个LEFT JOIN语句中使用CASE结果(MySQL)

这里是我当前的数据库查询,这个正确拉动信息,但users.username AS发出者会始终显示发件人名称:

SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE recipients END someid, 
       users.username AS sendername, 
       messages.body, 
       messages.time 
FROM messages 
LEFT JOIN users ON users.id = messages.senderid 
WHERE messages.recipients = $userid 
OR messages.senderid = $userid 
ORDER BY messages.time 

我想这一更改为以下等价的: LEFT JOIN users ON users.id = someid其中someid在上述情况下定义。

谢谢!

回答

2
SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE recipients END someid, 
       CASE WHEN $userid != senderid THEN senders.senderid ELSE receivers.recipients END somename 
       messages.body, 
       messages.time 
FROM messages 
LEFT JOIN users AS senders ON messages.senderid = senders.id 
LEFT JOIN users AS receivers ON messages.recipients = receivers.id 
WHERE messages.recipients = $userid 
OR messages.senderid = $userid 
ORDER BY messages.time 

您可能需要调整这个SQL得到你想要什么,但它的要点是加入两次,然后使用一个case语句来从相应的表拉你想要的项目。

+0

工作过的魅力!非常感谢Shawn。关于如何将多个收件人系统合并到此的任何想法建议?我编写了撰写系统,以便如果我将邮件写入多个人,收件人字段最终看起来像“,13,2,23,53”,其中内部号码是收件人的ID(封装通过逗号)?如果不是没有问题,我只是开始考虑这个问题 - 希望我能弄明白!非常感谢 - 这是我的主要障碍。 – Walker 2011-04-11 22:35:09