2

这是我的代码:

$query = mysql_query("SELECT P_Id, Thing,Something Date
    FROM priv
    WHERE Something = '$thing' AND thing2 <> 'This'
    LIMIT 1"
) or die(mysql_error());

"thing2 <> 'this'"代码在没有语句的情况下正常工作,但是当我实现时"thing2 <> 'this'",它返回 0 结果。好像表中没有空行,但表NULL的 thing2 行中有空 ( ) 行。

问题是,这个“不等于”语句不起作用,我已经尝试了一切,但它不会返回任何值。

编辑(解释词):列看起来像这样 - P_Id | 东西| 日期 | 东西1 | 事物 2 和我需要从某行接收 P_Id,其中Something = Something AND Thing1 NOT EQLAS 到“this”(上例)并且 Thing2 也不等于“this”。我知道这听起来很疯狂。抱歉

好的,所以我尝试了一些实验,发现“thing2 <>”thingy 不适用于 things1/thing2 列,但其他列(如“Something”表)也是“this”条目,它可以正常工作(找到最近的行没有'this'条目)。但是为什么这不适用于things1和2???我已经尝试重命名things列,但没有结果。

4

2 回答 2

7

something <> NULL将评估为NULL0如果在查询中使用与(或)几乎相同的查询false

请记住,SQL 使用三值逻辑而不是简单的二进制逻辑。

您可能需要使用以下命令显式检查 NULL IS NULL

... OR THING IS NULL

或者,您可以使用带有否定的NULL 安全等于运算符(这是 MySQL 特定<=>的,但是,它不是标准 SQL):

... AND NOT (THING <=> 'This')
于 2013-03-19T14:21:09.580 回答
0

我接受@JoachimSauer 的方式。另外,我也更喜欢尝试以下一种。

... WHERE Something = '$thing' AND NOT (IFNULL(thing2,'') = 'This')
LIMIT 1```

于 2020-05-28T10:14:44.707 回答