MySQL ile boş bir alanın kontrol edilmesi

6 Cevap php

Ben bazı kriterler, bir onlar bir e-posta adresine sahip olmak ile kullanıcılar için kontrol etmek için bir sorgu yazdı ettik.

Sitemiz bir kullanıcı bir e-posta adresi ya da yok sağlayacaktır.

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

Bu SQL boş bir alanın kontrol etmek için en iyi yolu nedir? Ben sadece çalıştım "IS NOT NULL" ve bu hala onları bir e-posta adresi kalmadan kullanıcıların kaydını iade ettik.

Ben bunu doğru şekilde yapıyorum eser yukarıda ama meraktan sorgu merak ettim.

6 Cevap

Boş alan, boş bir dize veya bir NULL olabilir.

Her iki işlemek için kullanın:

email > ''

Eğer tablo boş e-posta kaydı (iki tür) bir sürü varsa range erişiminden yararlanabilir hangi.

Evet, ne yapıyorsun doğru. Eğer e-posta alanı boş bir dize olmadığından emin olmak için kontrol edilir. NULL veri eksik demektir. Boş bir dize "" 0 uzunluğunda boş bir dizedir.

Ayrıca boş onay ekleyebilirsiniz

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

Boş bir dize (e-posta! = "") Ve NULL arasında bir fark var. Null null ve Boş dize şeydir.

Bu işe ancak iade edilen boş kaydın olasılığı hala var. Eğer kayıt eklediğinizde uzunluğu sıfır bir dize e-posta adresini ayarı olabilir rağmen, hala bir NULL e-posta adresi bir şekilde sistem içine alma talebini işlemek isteyebilirsiniz.

     $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 değildir ve boş ya da boşluk herhangi bir sayıda tüm kayıtları bulmak istiyorsanız, bu iş olacak:

LIKE '%\ '

Bir boşluk tersbölüden sonra orada olduğundan emin olun. Burada daha fazla bilgi: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

Sen kullanabilirsiniz

TRIM(IFNULL(email, '')) > ''