2017-07-03 10 views
0

私はPHPともphpMyAdminはこの単純なクエリを実行します。選択クエリ常に空の結果を返す

SELECT * FROM `rdm_order` WHERE `aff_result` != "xyc" 

私がチェックしました。テーブル、列、行が存在します。

ですが、クエリで空の結果が返されます。すべてのものが正しいようだVARCHAR(10) COLLATE utf8_persian_ci

aff_result

はこの形式です。なにが問題ですか?

Sample data

Server: Localhost via UNIX socket 
Server type: MySQL 
Server version: 5.7.17-0ubuntu0.16.04.1-log - (Ubuntu) 
Protocol version: 10 
Server charset: UTF-8 Unicode (utf8) 

Apache/2.4.25 (Unix) OpenSSL/1.0.2g 
Database client version: libmysql - mysqlnd 5.0.12-dev 
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation 
PHP version: 7.0.16 
+0

すべての 'aff_result'値は' xyc'または 'NULL'です。テーブル内の –

+0

はNULLです。 – Ali

+0

@HoneyBadger私はそれを行いました。同じ結果。 – Ali

答えて

2

値はNULLているからです。 NULL=または!=の比較ではキャプチャできません。代わりに以下を使用します。ANSI標準オペレータがis distinct fromある

SELECT * 
FROM `rdm_order` 
WHERE not `aff_result` <=> 'xyc'; 

SELECT * 
FROM  `rdm_order` 
WHERE `aff_result` != 'xyc' 
OR  `aff_result` IS NULL 
0

NULL -safe比較演算子を使用します。

+0

作品はありません。クエリはテキストとint型で動作します。 varcharでは使用できません。 – Ali

+0

これは 'varchar()'では機能しませんか?それは本当に奇妙です。 –

-1

aff_resultのデフォルト値をNULLに設定する理由がない場合は、aff_resultカラムを変更し、mysql alterコマンドを使用してデフォルト値を ''(空の文字列)に設定すると、セット。
@Siyualで説明されているように、NULLは=または!=比較ではキャプチャできません。
そしてwhere句でOR演算子を使用することは、インデックスフレンドリーではありません。

+0

あなたがdownvoteの理由を共有することができれば、私は本当にそれを感謝します。 – money

関連する問題