由于某种原因,这个查询不会产生正确的结果,任何人都可以看到我是否犯了一个简单的错误。如果最坏的情况变得更糟,我会把它分成两个查询,并使用我的应用程序引擎合并结果,但这是缓慢和肮脏的,我很想保持这是一个查询。MySQL混合AND's和OR's,括号不起作用
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;
任何帮助将非常感激。
你到底要与上面的查询做什么? – 2011-04-22 14:51:49
首先你不需要'WHERE'后面的第一个paranthese和最后一个,'ORDER BY'前面。其次,它的意思是:“不会产生正确的结果”?你能详细说明吗? – 2011-04-22 14:53:40
为了帮助你,你应该让我们知道你期待的结果,以及你实际得到的结果。看起来查询会用'from_clear'错误的方式向我们发送消息,或者使用'to_clear'错误向我发送消息给我。那实际上是你想要做什么?什么不起作用? – 2011-04-22 15:46:15