Memeriksa bidang kosong dengan MySQL


100

Saya telah menulis kueri untuk memeriksa pengguna dengan kriteria tertentu, salah satunya adalah mereka memiliki alamat email.

Situs kami akan memungkinkan pengguna memiliki atau tidak memiliki alamat email.

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

Apakah ini cara terbaik untuk memeriksa kolom kosong di SQL? Saya baru saja mencoba "IS NOT NULL" dan ini masih mengembalikan catatan pengguna tanpa mereka memiliki alamat email.

Kueri di atas berfungsi tetapi karena penasaran saya bertanya-tanya apakah saya melakukannya dengan cara yang benar.

php  sql  mysql  null 

Jawaban:


274

Bidang kosong bisa berupa string kosong atau a NULL.

Untuk menangani keduanya, gunakan:

email > ''

yang bisa mendapatkan keuntungan dari rangeakses jika Anda memiliki banyak catatan email kosong (kedua jenis) di tabel Anda.


11
Apa kebalikan dari ini? (Untuk saat Anda hanya menginginkan bidang NULL atau '')
Keylan

1
@Klan: tidak ada ekspresi tunggal.
Quassnoi

5
@Keylan:! (Email> '')
SEoF

3
@ SEoF: ini tidak akan cocokNULL
Quassnoi

2
Saya memiliki komentar yang sama dengan Quassnoi. Saya mengeluarkan "pilih orig_id, hotline dari normal_1952 di mana! (Hotline> '')" dan ada satu catatan dengan hotline null tetapi tidak cocok. Saya menggunakan MySQL 5.6
Scott Chu

38

Ya, apa yang Anda lakukan itu benar. Anda memeriksa untuk memastikan bidang email bukan string kosong. NULL berarti datanya hilang. String kosong ""adalah string kosong dengan panjang 0.

Anda juga dapat menambahkan pemeriksaan null

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

1
Ekspresi Anda juga akan cocok dengan string kosong. OR email IS NOT NULLdi sini mubazir (tersirat oleh kondisi sebelumnya).
Quassnoi

1
Menariknya, ini masih mengembalikan rekaman yang memiliki emailbidang kosong .

13
ATAU harus berupa DAN di sini. "OR email IS NOT NULL" akan cocok dengan string email kosong dengan panjang 0.
pdavis

Perhatikan komentar pdavis "ATAU HARUS DAN"
pemula


2

Ada perbedaan antara string kosong (email! = "") Dan NULL. NULL adalah null dan string Kosong adalah sesuatu.


Yang mana mengapa AND (email! = "" OR email IS NOT NULL) gagal?

3
harusAND (email != '' AND email IS NOT NULL)
thetaiko

@thetaiko: di email IS NOT NULLsini mubazir. !=predikat tidak akan pernah cocok dengan NULLnilai.
Quassnoi

bagaimana jika Anda mencoba: AND (trim (email)! = '')
Leslie

Saya tahu saya agak terlambat untuk diskusi ini, tetapi pernyataan tersebut akan berhasil jika Anda membalik urutannya: "AND ((email IS NOT NULL) AND (email! = '')). Jika dievaluasi dalam urutan lain, pernyataan dievaluasi sebagai null (bukan TRUE) jika alamat emailnya NULL, dan dengan demikian tidak akan menjadi TRUE atau FALSE. Jadi pemeriksaan IS NULL harus dilakukan PERTAMA!
Curt

2

Ini akan berfungsi tetapi masih ada kemungkinan catatan nol dikembalikan. Meskipun Anda mungkin menyetel alamat email ke string dengan panjang nol saat Anda memasukkan data, Anda mungkin masih ingin menangani kasus alamat email NULL yang masuk ke sistem.

     $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
     ');

Kueri @ op tidak memberikan kemungkinan NULLrekaman dikembalikan.
Quassnoi


-3

periksa kode ini untuk masalah:

$sql = "SELECT * FROM tablename WHERE condition";

$res = mysql_query($sql);

while ($row = mysql_fetch_assoc($res)) {

    foreach($row as $key => $field) {  

        echo "<br>";

        if(empty($row[$key])){

            echo $key." : empty field :"."<br>"; 

        }else{

        echo $key." =" . $field."<br>";     

        }
    }
}

Ada cara yang lebih baik untuk melakukan ini dalam kueri tanpa harus mengulang setiap baris
Jiho Kang
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.