2010-02-13 72 views
0

我有以下MySQL查询问题:MySQL查询问题布尔

SELECT * FROM TPDSessions WHERE TPDS_Morning = 0 AND TPDD_Id = 1 AND TPDS_Chair1_idPerson = 16785 OR TPDS_Chair2_idPerson = 16785 

返回该行有TPDS_Morning在它的值为1,我不知道为什么。这是表结构:

CREATE TABLE `TPDSessions` (
    `TPDS_Id` int(11) NOT NULL auto_increment, 
`TPDR_Id` int(32) NOT NULL, 
`TPDD_Id` int(32) NOT NULL, 
`TPDS_Morning` tinyint(1) NOT NULL, 
`TPDS_Name` varchar(200) NOT NULL, 
`TPDS_Chair1_idPerson` int(11) NOT NULL, 
`TPDS_Chair2_idPerson` int(11) NOT NULL, 
PRIMARY KEY (`TPDS_Id`), 
KEY `chair1_idPerson` (`TPDS_Chair1_idPerson`,`TPDS_Chair2_idPerson`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

如果任何人都可以解释如何调整我的查询不返回结果...

+0

魔术字是'优先'。 http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html – bobince 2010-02-13 13:18:56

回答

2

你可能会丢失一些支架与OR语句。

它可以是

SELECT * 
FROM TPDSessions 
WHERE (TPDS_Morning = 0 
AND  TPDD_Id = 1 
AND  TPDS_Chair1_idPerson = 16785) 
OR  TPDS_Chair2_idPerson = 16785 

SELECT * 
FROM TPDSessions 
WHERE TPDS_Morning = 0 
AND  TPDD_Id = 1 
AND  (TPDS_Chair1_idPerson = 16785 
OR  TPDS_Chair2_idPerson = 16785) 

我觉得第二个是更可能你是什么之后。

+1

是的,考虑到第二个问题很可能 – 2010-02-13 13:16:38

+0

argh ..就是这样。感谢您清理这个问题,之前有过这个问题,但是这次显然没有足够的时间注意到它。谢谢! – Maarten 2010-02-13 13:18:35

1

因为你在最后有一个OR。可能有一行与Chair2_idPerson = 16875和 TDPS_Morning = 1.在适当位置括号括起来的语句。