我已经关注两个表格来发送消息传递功能 -
message2_recips 表格:
mid seq uid status
1 1 1 N
1 1 503 A
message2 表
mid seq created_on created_on_ip created_by body
1 1 2013-08-08 19:17:44 1.2.2.1 503 some_random_text
我正在解雇此查询 -
SELECT m.mid, m.seq, m.created_ON, m.created_by, m.body, r.status
FROM message2_recips r
INNER JOIN message2 m ON m.mid=r.mid AND m.seq=r.seq
WHERE r.uid=503 AND r.status in ('A', 'N') AND r.seq=(SELECT max(rr.seq)
FROM message2_recips rr
WHERE rr.mid=m.mid AND rr.status in ('A', 'N')) AND IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)
ORDER BY created_ON DESC
预期结果是 -
mid seq created_on created_by body status
1 1 2013-08-08 19:17:44 503 some_random_text A
但它返回零结果
但是,如果我从查询中删除if
条件IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)
,我会得到正确的结果。但在观察message2
表中的数据后,查询中的条件满足且应该有效。
我无法弄清楚可能的原因。任何关于出错和如何纠正的指示都会非常有帮助。
所述查询确实如下,
它获得当前用户发起/接收的对话,从其他表获取消息内容。它会收到Delete
以外Active
或New
以外的状态的邮件。它使用最大序列号过滤我们与最新消息的对话。每条消息都有自己的序列号,并且增加了时尚。
这确实有效,但由于这是针对消息传递的收件箱功能,我希望用户能够看到自己发起的对话。现在上面的查询工作不正常,他只有在收到其他用户的回复后才能看到他发起的对话。
答案 0 :(得分:2)
您的预期结果符合IF
的条件:
IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)
因此上面的表达式返回1=0
,这是假的,因此忽略了行。
更具可读性可能只是将其添加到WHERE子句中:
AND NOT (m.seq=1 AND m.created_by=503)
如果您的意图是原始IF为真,请删除NOT
。