web-dev-qa-db-ja.com

MySQLで空のフィールドを確認する

特定の基準を持つユーザーをチェックするクエリを作成しました。1つはユーザーが電子メールアドレスを持っていることです。

このサイトでは、ユーザーがメールアドレスを持っているか持っていないかを許可します。

$aUsers=$this->readToArray('
 SELECT `userID` 
 FROM `users` 
 WHERE `userID` 
 IN(SELECT `userID`
         FROM `users_indvSettings`
  WHERE `indvSettingID`=5 AND `optionID`='.$time.')
  AND `email`!=""
 ');

これは、SQLの空のフィールドをチェックする最良の方法ですか? 「IS NOT NULL」を試したところ、メールアドレスがなくてもユーザーレコードが返されました。

上記のクエリは機能しますが、好奇心から私はそれを正しい方法でやっているのだろうかと思いました。

92
user275074

空のフィールドは、空の文字列またはNULLのいずれかです。

両方を処理するには、次を使用します。

email > ''

テーブルに多数の空の電子メールレコード(両方のタイプ)がある場合、rangeアクセスの恩恵を受けることができます。

264
Quassnoi

はい、あなたがしていることは正しいです。メールフィールドが空の文字列ではないことを確認しています。 NULLは、データが欠落していることを意味します。空の文字列""は、長さが0の空の文字列です。

Nullチェックも追加できます

AND (email != "" OR email IS NOT NULL)
35
Yada

使用できます

IFNULL(email, '') > ''
10

これは機能しますが、nullレコードが返される可能性がまだあります。レコードを挿入するときに電子メールアドレスを長さ0の文字列に設定している場合でも、何らかの方法でシステムに入力されたNULL電子メールアドレスのケースを処理したい場合があります。

     $aUsers=$this->readToArray('
     SELECT `userID` 
     FROM `users` 
     WHERE `userID` 
     IN(SELECT `userID`
               FROM `users_indvSettings`
               WHERE `indvSettingID`=5 AND `optionID`='.$time.')
     AND `email` != "" AND `email` IS NOT NULL
     ');
2
pdavis

空の文字列(メール!= "")とNULLには違いがあります。 NULLはnullで、空の文字列は何かです。

1
Leslie

NULLではなく、空または任意の数のスペースを含むすべてのレコードを検索する場合、これは機能します。

LIKE '%\ '

バックスラッシュの後にスペースがあることを確認してください。詳細はこちら: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

0