gpt4 book ai didi

mysql - 尽管数据正确,但查询结果意外

转载 作者:行者123 更新时间:2023-11-29 08:25:19 25 4
gpt4 key购买 nike

我遵循了两个消息传递功能表 -

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 的消息,即 ActiveNew。它会使用具有最大序列号的最新消息来过滤我们的对话。随着越来越流行,每条消息都有自己的序列号。

这确实有效,但由于这是消息传递的收件箱功能,我希望用户能够看到自己发起的对话。现在,由于上述查询无法正常工作,他只有在收到其他用户的回复后才能看到他发起的对话。

最佳答案

您的预期结果符合 IF 的条件:

IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)

因此上面的表达式返回 1=0,这是 false,因此该行被忽略。

简单地将其添加到 WHERE 子句中可能更具可读性:

AND NOT (m.seq=1 AND m.created_by=503)

如果您的目的是让原始 IF 成立,请删除 NOT

关于mysql - 尽管数据正确,但查询结果意外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18129260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com