Php 自动执行MySQL查询以创建列表
我不是向用户显示所有可用属性的列表,而是尝试向他们显示他们尚未保存到帐户中的所有属性。我将用户保存的属性记录在数据库的一个表中,我通过属性的Php 自动执行MySQL查询以创建列表,php,mysql,Php,Mysql,我不是向用户显示所有可用属性的列表,而是尝试向他们显示他们尚未保存到帐户中的所有属性。我将用户保存的属性记录在数据库的一个表中,我通过属性的id和用户的id进行记录 所以我想写一个如下的查询 $query=“从id!=1或3的属性中选择*” 然后,这将选择id为2的属性,并将其显示给用户,而不是用户已经看到并保存了1和3的1、2和3的列表 问题 上面写的这个查询似乎不起作用。它仍然显示所有的属性,我不知道为什么 编辑: 实际问题 现在它不会显示剩余的属性。上面的查询不显示预期的属性1或3,但现
id
和用户的id
进行记录
所以我想写一个如下的查询
$query=“从id!=1或3的属性中选择*”代码>
然后,这将选择id为2的属性,并将其显示给用户,而不是用户已经看到并保存了1和3的1、2和3的列表
问题
上面写的这个查询似乎不起作用。它仍然显示所有的属性,我不知道为什么
编辑:
实际问题
现在它不会显示剩余的属性。上面的查询不显示预期的属性1或3,但现在也不显示属性2 SQL不是这样工作的。您试图在SQL语句中使用PHP“notequal”。您必须为正在使用的数据库使用正确的SQL。它应该看起来更像这样:
$query = "SELECT * FROM propertys WHERE id <> 1 OR id <> 3"
如果我有一个可用值1、2和3的属性行源(如问题中所述),例如
我还有第二个表,其中包含“分配”给每个用户的属性行。。。每行表示分配给用户的属性,“缺失”行表示未分配的属性,例如
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
至少我找到了答案。从那时起,问题是试图为多个排除使用写入语法。谢谢大家的帮助 您需要在每次比较中包含该列$query=“SELECT*FROM propertys WHERE id!=1 and id!=3
或使用not in
$query=“SELECT*FROM propertys WHERE id no in(1,3)”
我不确定您是否编写了正确的语法,先生,请看一下:我的第二个查询有一个输入错误,$query=“SELECT*FROM propertys WHERE id not in(1,3)“
id 1或id 3
是错误的逻辑,not 1
将返回3,not 3
将返回1
。您需要和。=
也可以工作(虽然我不确定这是否兼容,但我倾向于使用
)。@chris85也可以写同样的东西。谢谢你的帮助,我实际上发现我可以使用,而不是在(1,2)中,它工作了!谢谢你的帮助。=
是有效的MySQL“不相等”符号。
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