由于某种原因,这个查询没有产生正确的结果,任何人都可以看看我是否犯了一个简单的错误。如果情况变得更糟,我会把它分成两个查询并使用我的应用程序引擎合并结果,但这很慢而且很脏,我希望保留这是一个查询。
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;
这是我的 table :
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)方法可能是原因。这是一个大胆的猜测,但会不会是您没有正确绑定(bind),或者没有足够的值?
尝试对语句中的值进行硬编码。我敢打赌它会起作用,然后你就可以处理绑定(bind)问题了。有时你必须有 2 个变量而不是一个被命名两次,但这取决于。换句话说,您可能必须尝试:
(`from` = :me_1 AND `to` = :them_1 AND `from_clear` = FALSE) OR
(`from` = :them_2 AND `to` = :me_2 AND `to_clear` = FALSE)
关于MySQL 混合 AND 和 OR,括号没有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756588/