【问题标题】:Automating a MySQL query to create a list自动化 MySQL 查询以创建列表
【发布时间】:2017-10-18 17:27:09
【问题描述】:

我没有向用户显示所有可用属性的列表,而是尝试向他们显示他们尚未保存到其帐户中的所有属性。我在数据库的表格中记录了用户保存了哪些属性,我通过属性的id 和用户的id 记录了这一点。

所以我想写一个类似的查询

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

然后,这将选择id 为 2 的属性,并将其显示给用户,而不是他们已经看到并保存了 1 和 3 的 1、2 和 3 的列表。

问题

上面写的这个查询似乎不起作用。它仍然显示所有属性,我不确定这是为什么。


编辑:

实际问题

现在它不会显示剩余的属性。上面的查询不显示属性 1 或 3,这是有意的,但现在也不显示属性 2。

【问题讨论】:

  • 您需要在每次比较时包含该列。 $query = "SELECT * FROM propertys WHERE id != 1 and id != 3 或使用 not in$query = "SELECT * FROM propertys WHERE id no in (1,3)"
  • 我不确定您写的语法是否正确,先生,请看一下:stackoverflow.com/questions/6156979/…
  • 我的第二个查询有错字,$query = "SELECT * FROM propertys WHERE id not in (1,3)"

标签: php mysql


【解决方案1】:

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"  

【讨论】:

  • id &lt;&gt; 1 OR id &lt;&gt; 3 是错误的逻辑,not 1 将带回 3,not 3 将带回 1。你需要and!= 也可以工作,sqlfiddle.com/#!9/104245/1(虽然我不确定它的兼容性如何,但我倾向于使用 &lt;&gt;)。
  • @chris85 写的是一样的东西。
  • 感谢您的帮助,我实际上发现我可以使用,NOT IN (1, 2) 并且它有效!不过感谢您的帮助。
  • != 是一个有效的 MySQL '不等于'符号。 dev.mysql.com/doc/refman/5.7/en/…
【解决方案2】:

如果我有一个可用值 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

【讨论】:

    【解决方案3】:

    至少我找到了答案。来自Here 尝试使用多个排除的写入语法存在问题。感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 2023-03-15
      • 2019-02-17
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多