gpt4 book ai didi

MySQL exclusion <> 仅在比较其他列时不伴随 OR 时才有效

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:23 24 4
gpt4 key购买 nike

SQL Fiddle 在这里:http://sqlfiddle.com/#!2/a2e41/8

我有一个查询执行多项检查:列 uidto 或 uidfrom 是否包含给定值。这工作正常,但只要我想排除列 hidden1 或 hidden2 包含给定值时,查询无论如何都会返回结果。一旦我取出第一个 uidto,uidfrom 检查,它什么都不返回,这是预期的。有没有办法做所有的检查?是否为了另一个而忽略了一个?

有什么想法吗?

编辑:

尽管列 hidden1 包含要检查的值,这仍然返回:

SELECT m.threadid,
m.uidto,
m.uidfrom,
m.type,
m.hidden1,
m.hidden2
FROM messages m
WHERE m.uidto = 1
OR m.uidfrom = 1
AND m.hidden1 <> 1
AND m.hidden2 <> 1
GROUP BY threadid;

这似乎遵守排除项,但不检查包含 1 的 uidfrom 或 uidto

SELECT m.threadid,
m.uidto,
m.uidfrom,
m.type,
m.hidden1,
m.hidden2
FROM messages m
WHERE m.hidden1 <> 1
AND m.hidden2 <> 1
GROUP BY threadid;

编辑:

有几个 threadid,我通过检查值是否与 uidto 或 uidfrom 匹配,然后检查用户 id 是否在 hidden1 或 hidden2 中,来提取属于线程中涉及的每个用户的消息(永远只有两个用户) .

hidden1 和 hidden2 列的值是选择对自己隐藏线程的用户 ID。

如果用户 1 删除了他的线程,我们将他的用户 ID (1) 放入 hidden1 列,这样他就看不到它,但另一个用户可以。如果用户 id 22 也参与了该线程,并且想删除该线程,则用户 id 22 将进入 hidden2,现在他们都看不到该线程。

只有发送消息的人或接收消息的人才能看到消息线程。没有其他人会参与其中。

最佳答案

试试这个查询,让我知道。

SELECT   m.threadid,
m.uidto,
m.uidfrom,
m.type,
m.hidden1,
m.hidden2

FROM messages m

WHERE (m.uidto = 1 OR m.uidfrom = 1)
AND m.hidden1 <> 1 AND m.hidden2 <> 1

GROUP BY threadid;

括号很重要......没有它们,它假定你的意思是:

WHERE    m.uidto = 1 OR ( m.uidfrom = 1  AND m.hidden1 <> 1 AND m.hidden2 <> 1 )

而且...这是由运算符的优先顺序决定的!我本来打算更新我的答案以包含相关信息,但后来我发现这篇很棒的 SO 帖子很好地涵盖了它:Mysql or/and precedence?


澄清:http://sqlfiddle.com/#!2/5f989/26/0

select  ThreadID, 

Type,

UIDto,
Hidden1,

case when UIDTo is null and Hidden1 is not null then concat('UserTo (',Hidden1,') is hidden')
when UIDTo is not null and Hidden1 is null then concat('UserTo (',UIDTo,') is NOT hidden')
else 'UserTo ('+UIDto+') status is unknown' end as UIDTo_Status,

UIDfrom,
Hidden2,

case when UIDFrom is null and Hidden2 is not null then concat('UserTo (',Hidden2,') is hidden')
when UIDFrom is not null and Hidden2 is null then concat('UserTo (',UIDFrom,') is NOT Hidden')
else 'UserTo ('+UIDfrom+') status is unknown' end as UIDfrom_Status


from messages

关于MySQL exclusion <> 仅在比较其他列时不伴随 OR 时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966886/

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