पैरामीटर मान कैसे सेट करें यदि यह रन टाइम पर क्वेरी में न्यूल है

मैं निम्नलिखित शर्त के आधार पर रिकॉर्ड प्राप्त करना चाहता हूं

String sql="select *from employee where email like "+student.email+" OR phoneno="+student.pno;

कभी-कभी ईमेल या फोन, केवल ईमेल करें, उस मामले में फ़ोन केवल शून्य मान हो सकता है यदि यह ईमेल और फोन शून्य है तो यह सभी रिकॉर्ड प्रदर्शित करेगा। अगर ईमेल केवल शून्य है तो यह इस तरह के फोन के आधार पर रिकॉर्ड प्रदर्शित करेगा।

कोई विचार कृपया?

0
@valverij आप ऐसा क्यों कहते हैं? वह पूछ रहा है, कृपया इस प्रश्न को संशोधित करें ताकि अगर कोई ईमेल नहीं दे रहा है, तो यह फोन पर आधारित होगा, अगर कोई फोन उपलब्ध नहीं है तो यह ईमेल के आधार पर वापस आ जाएगा। यदि दोनों उपलब्ध हैं, तो दोनों पर आधारित वापसी।
जोड़ा लेखक nrathaus, स्रोत
ईमेल और फोन शून्य होने पर यह एकमात्र तरीका मिल जाएगा, अगर आपके चर 'छात्र.मेल' और 'student.pno' दोनों शून्य थे।
जोड़ा लेखक Jim Black, स्रोत
यह कोड कोड की तरह दिखता है, न कि MySQL समस्या। आप किस भाषा का उपयोग कर रहे हैं? ऐसा लगता है कि या तो जावा या सी #।
जोड़ा लेखक valverij, स्रोत
@nrathaus, क्योंकि तब उसे क्वेरी को संशोधित करने की आवश्यकता नहीं हो सकती है। उदाहरण के लिए, यदि यह सी # था, तो उसे अप्रत्याशित परिणाम मिलेंगे क्योंकि जिस तरह से .NET इसे null में SQL में कनवर्ट करते समय व्यवहार करता है। इसके बजाय, वह student.email जैसे कुछ में पास करने के लिए C# coalesce ऑपरेटर ?? का उपयोग कर सकता है ?? DBNull.Value
जोड़ा लेखक valverij, स्रोत

2 उत्तर

i tired with following code. now i am getting expected output exactly. any one 
can tell me another way . 

StringBuilder sql=new StringBuilder("select *from aerp_marketing");
        int i=0,k=0;
    if(!(pno.equals(null)||pno.equals("")))
        {
            i=1;k=1;
        sql.append(" mobileno like '"+pno+"'");
        }
        if(!(email.equals(null)||email.equals("")))
    {
         i=1;
     if(k==0){
           k=1;
           sql.append(" email like '"+email+"'");
     }else{
        k=1;
        sql.append("and email like '"+email+"'");
      }
      }
          if(!(doentered.equals(null)||doentered.equals("")))
    {
           i=1;
        if(k==0){
        k=1;
        sql.append(" doentered = '"+doentered+"'");
        }else{
        k=1;
        sql.append("and doentered = '"+doentered+"'");
            }
    }
           if(!(yostudy.equals(null)||yostudy.equals("")))
    {
        i=1;
        if(k==0){
        k=1;
        sql.append(" yostudy like '"+yostudy+"'");
        }else{
        k=1;
        sql.append("and yostudy like '"+yostudy+"'");
            }
    }
            if(!(college.equals(null)||college.equals("")))
    {
        i=1;
        if(k==0){
        k=1;
        sql.append(" college like '"+college+"'");
             }else{
        k=1;
        sql.append("and college like '"+college+"'");
        }
    }

    if(i==1)
            {
                sql.insert(27, " where ");
    }

              String sqlquery=sql.toString();

    now query is ready to execute........
0
जोड़ा
कोई अपराध नहीं, लेकिन वह कोड भयानक लग रहा है। आप जो चाहते हैं उसे प्राप्त करने के लिए कृपया पैरामीटरयुक्त प्रश्नों का उपयोग करें! अन्यथा एसक्यूएल एसक्यूएल इंजेक्शन के लिए कमजोर है। codinghorror.com/ ब्लॉग/2005/04/& hellip;
जोड़ा लेखक Fabian Bigler, स्रोत

आप IF का उपयोग कर सकते हैं:

String sql="SELECT *
FROM employee
WHERE IF("+student.email+" IS NULL, 1, email = "+student.email+") OR
      IF("+student.pno+" IS NULL, 1, phoneno = "+student.pno+")";

मैं एसक्यूएल के प्रत्यक्ष मूल्य की बजाय बाइंडर्स का उपयोग करने का सुझाव देता हूं क्योंकि यह एसक्यूएल इंजेक्शन के लिए प्रवण है, यह भी बिना किसी फंकी पात्रों के मुद्दों के कारण सुरक्षित होगा।

0
जोड़ा
मैं जावा का उपयोग कर रहा हूं अगर (pno.equals (null) && email.equals (null) || pno.equals ("") & ema और zwnj; il.equals ("")) {sql = "anerp_marketing से * चुनें"; } else अगर (email.equals (null) || email.equals ("")) {sql = "select * से aerp_marketing से चुनें जहां phoneno" + pno; } और अगर (pno.equals (null) || pno.equals ("")) {sql = "select * से aerp_marketing से चुनें जहां ईमेल" + + + + "जैसे ईमेल है; System.out.println ("एसक्यूएल क्यूरी:" + एसक्यूएल); } else sql = "select * से aerp_marketing जहां ईमेल" + ईमेल + "और फोनो जैसे" + pno;
जोड़ा लेखक user1990992, स्रोत
अब तक मैं केवल इस तरह का उपयोग कर रहा हूं अगर अन्य स्थिति या स्ट्रिंगबिल्डर का उपयोग कर रहा हूं। मुझे किसी और तरीके से कोई जानकारी नहीं है कृपया मेरी मदद करें !!!!!!
जोड़ा लेखक user1990992, स्रोत
मैंने आसपास के कोड @JimBlack के बिना एसक्यूएल में एक संशोधन लिखा था
जोड़ा लेखक nrathaus, स्रोत
मैं समझ नहीं पा रहा हूं कि आप @JimBlack क्या कह रहे हैं, मैंने अपनी लाइन ली और IF जोड़ा, उसमें त्रुटि कहां है? मेरा लक्ष्य एसक्यूएल वह कोड नहीं है जिसका वह उपयोग कर रहा है। मुझे पता है कि यह सब के लिए छद्म कोड हो सकता है
जोड़ा लेखक nrathaus, स्रोत
जावा (चेक) में इसे अपने एसक्यूएल के अंदर न करें, यह पढ़ने के लिए स्पष्ट होगा और गलतियों से कम प्रवण होगा यदि कोई और आपका कोड पढ़ता है। इसके अलावा एसक्यूएल <कोड> आईएफ के साथ आप एसक्यूएल ले सकते हैं और जावा के माध्यम से पढ़ने की आवश्यकता के बिना इसका परीक्षण कर सकते हैं और यह अनुमान लगाने का प्रयास कर सकते हैं कि एसक्यूएल क्या चल रहा है
जोड़ा लेखक nrathaus, स्रोत
मैंने आपको लिखा है कि एसक्यूएल में इसे कैसे करना है मुद्दा क्या है? यदि आप नहीं जानते हैं कि SQL को IF करने के लिए जावा का उपयोग करें
जोड़ा लेखक nrathaus, स्रोत
मुझे लगता है कि छात्र.मेल और student.pno चर हैं, प्लस संकेतों के साथ तार नहीं?
जोड़ा लेखक Jim Black, स्रोत
उदाहरण के लिए, जावास्क्रिप्ट (या जावा या सी #), आप यौगिक तार बनाने के लिए '+' का उपयोग करेंगे। उनके उदाहरण में, '+' संकेत डबल कोट्स के बाहर हैं, अंदर नहीं।
जोड़ा लेखक Jim Black, स्रोत