MySQL混合和';s和或';s、 括号没用

MySQL混合和';s和或';s、 括号没用,mysql,Mysql,由于某些原因,此查询没有生成正确的结果,是否有人看到我犯了一个简单的错误。如果情况变得更糟,我会将它分成两个查询,并使用我的应用程序引擎合并结果,但这是缓慢和肮脏的,我希望这是一个查询 SELECT * FROM `chat_messages` WHERE ( (`from` = :me AND `to` = :them AND `from_clear` = FALSE) OR (`from` = :them AND `to` = :me AND `to_clear` = FALSE) )

由于某些原因,此查询没有生成正确的结果,是否有人看到我犯了一个简单的错误。如果情况变得更糟,我会将它分成两个查询,并使用我的应用程序引擎合并结果,但这是缓慢和肮脏的,我希望这是一个查询

SELECT *
FROM `chat_messages` 
WHERE
(
(`from` = :me AND `to` = :them AND `from_clear` = FALSE) OR 
(`from` = :them AND `to` = :me AND `to_clear` = FALSE)
) 
ORDER BY `time` ASC;
这是我的桌子:

CREATE TABLE `chat_messages` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `from` varchar(16) NOT NULL,
  `to` varchar(16) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `message` text NOT NULL,
  `read` tinyint(1) NOT NULL DEFAULT '0',
  `from_clear` tinyint(1) NOT NULL DEFAULT '0',
  `to_clear` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `from` (`from`),
  KEY `to` (`to`),
  KEY `time` (`time`),
  KEY `read` (`read`),
  KEY `from_clear` (`from_clear`),
  KEY `to_clear` (`to_clear`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=latin1;

如果您有任何帮助,我们将不胜感激。

如果您不知道错误,您就无法在此处获得正确答案。但正如其中一条评论所指出的,您的bind方法可能是原因。这是一个猜测,但可能是您没有正确绑定,或者没有足够的值

尝试对语句中的值进行硬编码。我敢打赌它是有效的,然后您就可以处理绑定问题了。有时你必须有两个变量,而不是一个被命名两次,但这取决于。换句话说,您可能必须尝试:

(`from` = :me_1 AND `to` = :them_1 AND `from_clear` = FALSE) OR 
(`from` = :them_2 AND `to` = :me_2 AND `to_clear` = FALSE)

如果不知道错误,你就无法在这里得到正确的答案。但正如其中一条评论所指出的,您的bind方法可能是原因。这是一个猜测,但可能是您没有正确绑定,或者没有足够的值

尝试对语句中的值进行硬编码。我敢打赌它是有效的,然后您就可以处理绑定问题了。有时你必须有两个变量,而不是一个被命名两次,但这取决于。换句话说,您可能必须尝试:

(`from` = :me_1 AND `to` = :them_1 AND `from_clear` = FALSE) OR 
(`from` = :them_2 AND `to` = :me_2 AND `to_clear` = FALSE)

您想对上述查询执行什么操作?首先,您不需要在
WHERE
之后使用phirst命令,也不需要在
ORDER BY
之前使用最新的phirst命令。第二,它是什么意思:“没有产生正确的结果”?你能详细说明一下吗?为了帮助你,你应该让我们知道你期望的结果,以及你实际得到的结果。查询将查找从我到他们的带有
from\u clear
false的消息,或从他们到我的带有
到\u clear
false的消息。这就是你想要做的吗?什么不起作用?另外,您使用哪个库将值绑定到
:me
:它们
?您到底想对上述查询做什么?首先,您不需要在
WHERE
之后使用这些值,也不需要在
ORDER BY
之前使用最新的值。第二,它是什么意思:“没有产生正确的结果”?你能详细说明一下吗?为了帮助你,你应该让我们知道你期望的结果,以及你实际得到的结果。查询将查找从我到他们的带有
from\u clear
false的消息,或从他们到我的带有
到\u clear
false的消息。这就是你想要做的吗?什么不起作用?另外,您使用哪个库将值绑定到
:me
:它们
?我使用PDO库进行绑定。我想做的是获取两个用户之间所有尚未清除的消息。sql没有正确地返回消息列表,当一个人清除了他们的列表时,就会把两个列表都搞乱。MJB解决方案成功了,这一定是多个绑定的问题。我正在使用PDO库进行绑定。我想做的是获取两个用户之间所有尚未清除的消息。sql没有正确地返回消息列表,当一个人清除了他们的列表时,就会把两个列表都搞乱。MJB解决方案奏效了,这一定是多个绑定的问题。