0
我遇到问题了解如何为下面复制的查询创建一个case语句。本质上,查询所做的只是从messages_messages查询当前用户发送的数据($ userid)或者发送原始线程($ threadid)的发件人。对于除线程的原始发件人之外的所有人来说,这是一个完美的SELECT,他们应该能够将所有与该线程相关的消息都提取出来。帮助创建正确的CASE语句
基本上我需要添加SQL相当于以下语句:
WHERE messages_threads.id = $threadid
if($userid == messages_threads.senderid) {
// Don't add an AND clause
} else {
// Add the following AND clause
AND (messages_messages.senderid = $userid OR messages_messages.senderid = messages_threads.senderid)
}
这里是我目前使用的查询:
SELECT messages_messages.id, messages_messages.senderid, username AS sendername, pictures.url AS picture, body, UNIX_TIMESTAMP(time) AS unixtimestamp
FROM messages_messages
JOIN messages_threads ON messages_threads.id = messages_messages.threadid
JOIN users ON messages_messages.senderid = users.id
LEFT JOIN pictures ON messages_messages.senderid = pictures.userid AND pictures.profile = 1
WHERE messages_threads.id = $threadid
AND (messages_messages.senderid = $userid OR messages_messages.senderid = messages_threads.senderid)
ORDER BY time ASC
非常感谢!唯一的问题是$ userid == messages_threads中的两个等号 - 应该只是一个等号。 – Walker 2011-04-26 20:47:53
@Walker:啊叶,编辑修复 – Claudiu 2011-04-26 20:49:33