Php MySQLi!=不处理多个和/或子句
因此,我的数据库中有两行-Php MySQLi!=不处理多个和/或子句,php,mysql,where,clause,Php,Mysql,Where,Clause,因此,我的数据库中有两行-user_one和user_two,这些行被用户ID占用,作为消息系统的编号,我还在同一消息功能中包含了一个支持票证系统,但此代码段存在一些问题 $sqlc="SELECT * FROM ap_conversations WHERE user_one = '$user_id' AND user_two != '999' OR user_two = '$user_id' AND user_one != '999' OR user_one = '$user_id' AND
user_one
和user_two
,这些行被用户ID占用,作为消息系统的编号,我还在同一消息功能中包含了一个支持票证系统,但此代码段存在一些问题
$sqlc="SELECT * FROM ap_conversations WHERE user_one = '$user_id' AND user_two != '999' OR user_two = '$user_id' AND user_one != '999' OR user_one = '$user_id' AND user_two != '999d' OR user_two = '$user_id' AND user_one != '999d'";
$sqlc="SELECT * FROM ap_conversations WHERE (user_one = '$user_id' AND user_two != '999') OR (user_two = '$user_id' AND user_one != '999') OR (user_one = '$user_id' AND user_two != '999d') OR (user_two = '$user_id' AND user_one != '999d')";
正如您所注意到的,支持票证ID是999
,当它被保留为仅检查两个ID是否都是999
时,此代码工作正常。虽然我还需要它来检查user\u one
或user\u two
的ID是否为999
或999d
。当前代码返回1
,当我知道某个事实时,它应该返回0
,因此我知道某些地方明显出错,我想我可能设置不正确。我曾尝试以多种不同的格式设置它:
$sqlc="SELECT * FROM ap_conversations WHERE user_one = '$user_id' AND (user_two != '999' OR user_two != '999d') OR user_two = '$user_id' AND (user_one != '999' OR user_one != '999d')";
但仍然得到同样的结果?有人能告诉我我做错了什么,或者我怎样才能使代码更好地执行吗 您需要使用括号来建立运算符优先级:
$sqlc="SELECT * FROM ap_conversations
WHERE (user_one = '$user_id' AND user_two != '999')
OR (user_two = '$user_id' AND user_one != '999')
OR (user_one = '$user_id' AND user_two != '999d')
OR (user_two = '$user_id' AND user_one != '999d')";
您需要使用括号来建立运算符优先级:
$sqlc="SELECT * FROM ap_conversations
WHERE (user_one = '$user_id' AND user_two != '999')
OR (user_two = '$user_id' AND user_one != '999')
OR (user_one = '$user_id' AND user_two != '999d')
OR (user_two = '$user_id' AND user_one != '999d')";
请尝试在查询中添加括号,如下所示:
请尝试在查询中添加括号,如下所示: …是一个问题,它简化为
user\u one='$user\u id'
,和
条件变得无关
如果您不相信我,请尝试一行,其中user\u one=user\u id
和user\u two='999'
。。它不满足第一个括号内的条件,但通过第二个条件并返回
我想你想要:
SELECT * FROM ap_conversations
WHERE (user_one = :user_id AND user_two NOT IN ('999','999d'))
OR (user_two = :user_id AND user_one NOT IN ('999','999d'));
注意:将'999'
或'999d'
作为$user\u id
传递仍将返回支持票证。我非常喜欢此功能,但如果不需要此功能,您可以使用:
SELECT * FROM ap_conversations
WHERE (user_one = :user_id OR user_two = :user_id)
AND user_one NOT IN ('999','999d')
AND user_two NOT IN ('999','999d');
…是一个问题,它简化为user\u one='$user\u id'
,和
条件变得无关
如果您不相信我,请尝试一行,其中user\u one=user\u id
和user\u two='999'
。。它不满足第一个括号内的条件,但通过第二个条件并返回
我想你想要:
SELECT * FROM ap_conversations
WHERE (user_one = :user_id AND user_two NOT IN ('999','999d'))
OR (user_two = :user_id AND user_one NOT IN ('999','999d'));
注意:将'999'
或'999d'
作为$user\u id
传递仍将返回支持票证。我非常喜欢此功能,但如果不需要此功能,您可以使用:
SELECT * FROM ap_conversations
WHERE (user_one = :user_id OR user_two = :user_id)
AND user_one NOT IN ('999','999d')
AND user_two NOT IN ('999','999d');
这是个大问题;)新年快乐,约翰洛文的“解释”;-)谢谢你的回答,这似乎对我来说仍然不起作用,代码似乎仍然返回结果,即使结果包括
999d
。你确定$userid
已填充并且具有你期望的值吗?@Arth请不要在其他答案中征求你的答案。你对OP的评论应该放在他们的问题下面。除非你的评论是针对约翰的。这是一个很大的谎言;)新年快乐,约翰洛文的“解释”;-)谢谢你的回答,这似乎对我来说仍然不起作用,代码似乎仍然返回结果,即使结果包括999d
。你确定$userid
已填充并且具有你期望的值吗?@Arth请不要在其他答案中征求你的答案。你对OP的评论应该放在他们的问题下面。除非你的评论是针对约翰的。这似乎很有效!非常感谢!我可以看出它忽略了一些东西,但只是在努力找出哪一部分,它似乎也在某种程度上简化了它。不在
中的函数是否有相反的作用?是的,在
中,但要注意操作数/运算符的空值。函数可能无法按预期执行。这似乎工作得很好!非常感谢!我可以看出它忽略了一些东西,但只是在努力找出哪一部分,它似乎也在某种程度上简化了它。函数中的不在
中是否有相反的作用?是的,在
中,但要注意函数可能无法按预期执行的操作数/运算符的空值。