【发布时间】:2011-04-12 19:27:04
【问题描述】:
我正在创建一个类似于 iPhone SMS 系统的多收件人线程消息系统(其中收件箱和发件箱合并为一个显示,两个用户之间只能存在一个线程)。
使用发件人列(例如“11”)和收件人列(例如“,13,10,15,20”)存储消息。为了存储多个收件人,我用逗号将它们分开,并使用 "%" + ",$userid," + "#" 调用查询该字段。这样做的问题是它弄乱了将接收者连接到用户表(具有用户名)的 LEFT JOIN。
这是我当前的查询:
$sql =
"SELECT DISTINCT CASE
WHEN $userid != senderid THEN senderid ELSE recipients END someid,
CASE WHEN 13 != senderid THEN senders.username ELSE receivers.username 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";
这是我想做的:
如果收件人中只有一个收件人 id(内容看起来像“,id”,则删除 id 周围的逗号以找到发件人名称(LEFT JOIN users AS receivers ON messages.recipients(WITHOUT COMMAS ) = receivers.id。
如果收件人中有多个收件人 id(内容看起来像“,id,id2,id3”等),则以某种方式提取与该 ID 对应的所有名称并将结果存储为类似于如下:sendername = "Name1, Name2, Name3";.
有人知道我将如何处理这个问题吗?也许是子查询?非常感谢您的帮助。
【问题讨论】: