由於某種原因,這個查詢不會產生正確的結果,任何人都可以看到我是否犯了一個簡單的錯誤。如果最壞的情況變得更糟,我會把它分成兩個查詢,並使用我的應用程序引擎合併結果,但這是緩慢和骯髒的,我很想保持這是一個查詢。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