这是我的代码:
$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结果。好像表中没有空行,但表的thing2行中有空行(NULL
)。
问题是,这个“不等于”语句不起作用,我已经尝试了所有内容,但它不会返回任何值。
编辑(解释词): 列看起来像这样 - P_Id |东西|日期|事1 |事2和我需要从一行中接收P_Id,其中Something = Something和Thing1 NOT EQLAS到'this'(上例)和Thing2也不等于'this'。我知道这听起来很疯狂.Sorry
好的,所以我尝试了一些实验,并且它表示“thing2&lt;&gt;” thingy不是在thing1 / thing2列上工作,但其他列如“Something”表中也有'this'条目它正常工作(找到没有'this'条目的nerest行)。但为什么这不起作用things1和2 ???我试过重命名事物列,但没有结果。
答案 0 :(得分:5)
something <> NULL
will evaluate to NULL
。如果在与0
(或false
)几乎相同的查询中使用。
请记住,SQL使用three-valued logic而不是简单的二进制逻辑。
您可能需要使用IS NULL
显式检查NULL:
... OR THING IS NULL
Alernatively你可以使用NULL-safe equals operator <=>
否定(这是MySQL特定的,it's not standard SQL):
... AND NOT (THING <=> 'This')
答案 1 :(得分:0)
我接受@JoachimSauer的方式。另外,我也喜欢尝试以下一种。
... WHERE Something = '$thing' AND NOT (IFNULL(thing2,'') = 'This')
LIMIT 1```