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 | Thing 2 と、Something = Something AND Thing1 NOT EQLAS to 'this' (上記の例) および Thing2 ALSO NOT EQUALS to 'this' の行から P_Id を受け取る必要があります。

わかりましたので、いくつかの実験を試してみましたが、「thing2 <>」thingy は things1/thing2 列では機能していませんが、「this」エントリでもある「Something」テーブルのような他の列は適切に動作します (最も近い行を見つける) 「this」エントリがない場所)。しかし、なぜこれが things1 と 2 で機能しないのですか???Things 列の名前を変更しようとしましたが、結果はありません。

4

2 に答える 2

7

something <> NULLに評価されNULLます。0また、 (または)とほぼ同じクエリで使用する場合false

SQL は、単純なバイナリ ロジックではなく、3 値ロジックを使用することに注意してください。

次を使用して明示的に NULL をチェックする必要がある場合がありますIS NULL

... OR THING IS NULL

あるいは、 NULL セーフの equals 演算子<=>を否定とともに使用することもできます(これは MySQL 固有ですが、標準 SQL ではありません)。

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