特定の基準を持つユーザーをチェックするクエリを作成しました。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」を試したところ、メールアドレスがなくてもユーザーレコードが返されました。
上記のクエリは機能しますが、好奇心から私はそれを正しい方法でやっているのだろうかと思いました。
空のフィールドは、空の文字列またはNULL
のいずれかです。
両方を処理するには、次を使用します。
email > ''
テーブルに多数の空の電子メールレコード(両方のタイプ)がある場合、range
アクセスの恩恵を受けることができます。
はい、あなたがしていることは正しいです。メールフィールドが空の文字列ではないことを確認しています。 NULLは、データが欠落していることを意味します。空の文字列""
は、長さが0の空の文字列です。
Nullチェックも追加できます
AND (email != "" OR email IS NOT NULL)
使用できます
IFNULL(email, '') > ''
これは機能しますが、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
');
空の文字列(メール!= "")とNULLには違いがあります。 NULLはnullで、空の文字列は何かです。
NULLではなく、空または任意の数のスペースを含むすべてのレコードを検索する場合、これは機能します。
LIKE '%\ '
バックスラッシュの後にスペースがあることを確認してください。詳細はこちら: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html