2011-04-16 72 views
1

我有这个疑问:查询不产生正确的记录

SELECT id, name FROM users 
WHERE ((id = 1) OR (5 <= 5)) 

这将导致所有记录为5 = 5,但事实并非如此。这只是导致记录的id = 1。

我在做什么错?

编辑: 这是一个完整的查询:

SELECT project_id, project_name, project_description, project_active, 
      users.user_firstname, users.user_lastname FROM projects 
      INNER JOIN users ON projects.user_id = users.user_id 
      WHERE (projects.user_id = 1 || 3 <= 3) 

编辑: 发现它=/ 东西是不对的加盟;由于某种原因,user_id不再存在。

+1

会发生什么如果删除所有的括号? – 2011-04-16 12:53:21

+0

该查询没有问题,如果我设置了自己的数据库并使用它,我会看到'用户'中的所有行。你的桌子是什么样的?你期望看到哪些行,但没有? – VoteyDisciple 2011-04-16 12:57:14

+1

然后,你的mysql安装有一个严重的问题。刚刚在这里进行测试,并按预期载入所有结果。 – Andre 2011-04-16 12:59:58

回答

0

尝试:

EXPLAIN EXTENDED SELECT id, name FROM users where id=1 or 5<=5; 

SHOW WARNINGS; 

你也会发现MySQL的执行查询的是:

SELECT id,name FROM users where 1 

只是意味着(ID = 1或5 < = 5)同1

0

那么你想要所有记录小于或等于5吗?

如果是其唯一的

SELECT id, name FROM users 
WHERE id <= 5 

那旁边

(5 <= 5) 

为 “5” 的表行一样的ID?

+0

更仔细地阅读该查询。原文有'(5 <= 5)',这是一种重言式。问题是:为什么,如果这是一种重言式,是不是所有的行都被返回? – VoteyDisciple 2011-04-16 12:58:03

+0

@VoteyDiscipleI以前从来没有见过这种情况,可能是别人是的,但值的不值,它是MySQL或其ISO SQL的独特功能。 – SIFE 2011-04-16 13:06:39

+1

这是ANSI标准。你可以比较你想要的任何东西,包括两个值。(除了在生成的SQL语句中,它通常不是很有用,但DBMS并不关心你如何得到值,只要它有东西可以比较。) – VoteyDisciple 2011-04-16 13:31:03

0

做这个

$q = ("SELECT id, name FROM users WHERE id = 1 || 5 <= 5"); 

这是我要做的事。