MySQL के साथ एक खाली फ़ील्ड की जाँच करना


100

मैंने कुछ मानदंडों के साथ उपयोगकर्ताओं की जांच करने के लिए एक क्वेरी लिखी है, एक उनके पास एक ईमेल पता है।

हमारी साइट किसी उपयोगकर्ता को ईमेल पता रखने या न रखने की अनुमति देगी।

$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" की कोशिश की है और यह अभी भी एक ईमेल रिकॉर्ड वाले उपयोगकर्ताओं को उनके बिना वापस लौटा दिया है।

उपरोक्त क्वेरी काम करती है लेकिन जिज्ञासा से बाहर है तो मुझे आश्चर्य है कि क्या मैं इसे सही तरीके से कर रहा हूं।

php  sql  mysql  null 

जवाबों:


274

एक खाली फ़ील्ड या तो एक खाली स्ट्रिंग या एक हो सकता है NULL

दोनों को संभालने के लिए, उपयोग करें:

email > ''

rangeयदि आपकी तालिका में बहुत सारे खाली ईमेल रिकॉर्ड (दोनों प्रकार) हैं, तो आप इसका उपयोग कर सकते हैं ।


11
इसका विलोम क्या है? (जब आप केवल NULL या 'फ़ील्ड' चाहते हैं)
Keylan

1
@Keylan: कोई एकल अभिव्यक्ति नहीं।
क्वासोई

5
@Keylan:! (ईमेल> '')
SEOF

3
@SEoF: यह मैच नहीं होगाNULL
क्वासोई

2
मेरे पास Quassnoi जैसी ही टिप्पणी है। मैं "select_id, normal_1952 से हॉटलाइन जारी करता हूं, जहां (हॉटलाइन> '')" और वहाँ एक रिकॉर्ड हॉट हॉटलाइन के साथ है लेकिन यह मेल नहीं खाता। मैं MySQL 5.6
स्कॉट चू

38

हां, आप जो कर रहे हैं वह सही है। आप यह सुनिश्चित करने के लिए जाँच कर रहे हैं कि ईमेल फ़ील्ड खाली स्ट्रिंग नहीं है। NULL का मतलब है कि डेटा गायब है। एक खाली स्ट्रिंग ""0 की लंबाई के साथ एक रिक्त स्ट्रिंग है।

आप अशक्त चेक भी जोड़ सकते हैं

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

1
आपकी अभिव्यक्ति खाली स्ट्रिंग के साथ भी मेल खाएगी। OR email IS NOT NULLयहाँ बेमानी है (यह पिछली स्थिति से निहित है)।
क्वासोई

1
दिलचस्प है, यह अभी भी रिकॉर्ड है कि एक खाली emailक्षेत्र है।

13
OR एक और यहाँ होना चाहिए। "या ईमेल
नॉट नॉट नेल"

सूचना pdavis टिप्पणी "या होना चाहिए और"
शुरुआत


2

खाली स्ट्रिंग (ईमेल! = "") और NULL में अंतर है। Null अशक्त है और एक खाली स्ट्रिंग कुछ है।


यही कारण है कि और (ईमेल! = "" या ईमेल नहीं है) विफल हो रहा है?

3
होना चाहिएAND (email != '' AND email IS NOT NULL)
थीटाको

@ थियेटिको: email IS NOT NULLयहां बेमानी है। !=विधेय कभी भी एक NULLमूल्य से मेल नहीं खाता ।
क्वासोई

क्या होगा अगर तुम कोशिश करो: और (ट्रिम (ईमेल)! = '')
Leslie

मुझे पता है कि मैं इस चर्चा में देर कर रहा हूं, लेकिन यदि आप आदेश को उलट देंगे तो बयान काम करेगा: "और ((ईमेल आईएस नहीं है) और (ईमेल! = ''))। यदि दूसरे क्रम में मूल्यांकन किया जाता है, तो ई-मेल पता NULL होने पर कथन अशक्त (TRUE नहीं) के रूप में मूल्यांकित होता है, और इस प्रकार या तो TRUE या FALSE नहीं होगा। तो IS NULL चेक में FIRST आना है!
कर्ट

2

यह काम करेगा लेकिन अभी भी एक अशक्त रिकॉर्ड वापस होने की संभावना है। हालाँकि, जब आप रिकॉर्ड डालते हैं, तो आप ईमेल पते को लंबाई शून्य के एक स्ट्रिंग पर सेट कर सकते हैं, फिर भी आप किसी तरह से 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
     ');

@ op की क्वेरी NULLरिकॉर्ड वापस आने की कोई संभावना नहीं छोड़ती है ।
क्वासोनि

0

यदि आप उन सभी रिकॉर्डों को खोजना चाहते हैं जो NULL नहीं हैं, और या तो रिक्त हैं या उनके पास कोई रिक्त स्थान है, तो यह काम करेगा:

LIKE '%\ '

सुनिश्चित करें कि बैकस्लैश के बाद एक स्थान है। यहाँ अधिक जानकारी: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-Actact.html


-3

समस्या के लिए इस कोड की जाँच करें:

$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>";     

        }
    }
}

हर एक पंक्ति के माध्यम से लूप किए बिना क्वेरी में ऐसा करने के बेहतर तरीके हैं
जिओ कांग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.