2017-04-20 65 views
0

而不是向所有可用属性的用户显示列表,我试图向他们展示他们尚未保存到其帐户的所有属性。我在数据库的表格中记录了用户保存的属性,我记录了该属性的id和用户的id自动执行MySQL查询以创建列表

所以想写像

$query = "SELECT * FROM propertys WHERE id != 1 or 3";

此查询然后将选择为2的id的属性,并将其显示给用户,而不是图1和2和一个列表3,他们已经看到并保存1和3

的问题

这个查询上面写的似乎并没有工作。它仍然显示所有的属性,我不知道为什么。


编辑:

把实际问题

现在它不会显示被遗留的属性。上面的查询不显示属性1或3,这是满意的,但现在也不显示属性2.

+1

您需要在每个比较中包含列。 '$ query =“SELECT * FROM propertys WHERE id!= 1 and id!= 3'或使用'not in'。'$ query =“SELECT * FROM propertys WHERE id no in(1,3)”' – chris85

+0

我不确定你写了正确的语法先生,请看看这个:http://stackoverflow.com/questions/6156979/sql-where-condition-not-equal- –

+0

我的第二个查询有一个拼写错误,'$ query =“SELECT * FROM propertys WHERE id not in(1,3)”'。 – chris85

回答

0

这不是SQL的工作原理。你正试图在SQL语句中使用PHP“不等于”。你将不得不为你正在使用的数据库使用正确的SQL。它看起来更像是这样的:

$query = "SELECT * FROM propertys WHERE id <> 1 OR id <> 3" 

或本:

$query = "SELECT * FROM propertys WHERE id NOT LIKE 1 OR id NOT LIKE 3" 
+3

'id <> 1 OR id <> 3'是错误的逻辑,'not 1'将带回3,'not 3'将带回'1'。你需要'和'。 '!='也可以工作,http://sqlfiddle.com/#!9/104245/1(尽管我不确定它是多么兼容,我倾向于使用''''')。 – chris85

+1

@ chris85就是写同样的东西。 – webnoob

+0

谢谢你的帮助,我实际上发现我可以使用,而不是(1,2),它的工作!不过谢谢你的帮忙。 – Nick

0

如果我有一列源可用值1,2和3中的问题说明)特性,例如

property 
id name 
-- ------- 
    1 foo 
    2 fi 
    3 fo 
    4 fum 

而我却包含了被“分配”给每个用户的特性行的第二个表,......每一行代表分配给用户的属性,而“失踪”行代表一个属性没有分配,例如

user_assigned_property 
user_name property_id 
------- ----------- 
jack  1 
jack  3 
giant  3 
giant  4 

,我可能会使用反连接模式:从属性返回所有行,与外连接到指定的属性,并在where子句中的条件排除,那里有一个匹配

所有行

我们预计这样的:

SELECT p.id 
    , p.name 
    FROM property p 
    LEFT 
    JOIN user_assigned_property a 
    ON a.property_id = p.id 
    AND a.user_name = 'jack' 
WHERE a.property_id IS NULL 
ORDER 
    BY p.id 

返回:

id name 
-- ---- 
2 fi 
4 fum 
0

我发现我的answe至少。从Here有问题是试图有多个排除的写入语法。感谢大家的帮助。