Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql, क्वेरी जहां कंडेशन के साथ, यदि एक मान =कोई चीज़

अपने WHERE क्लॉज आइटम को तार्किक रूप से समूहित करने के लिए, अपनी क्वेरी में कोष्ठक का उपयोग करें।

WHERE name = 'abc' AND (value = 12 OR 1=1)

यदि आप एक ऐसी क्वेरी प्रदान करने का प्रयास कर रहे हैं जो दो चरों को स्वीकार करती है, और उन चरों के आधार पर खोज करती है तो आप अपने तर्क में केवल थोड़ी दूर हैं।

दोनों चरों की आपूर्ति के साथ

मान लें कि हमारे पास दो चर हैं @incoming_name और @incoming_value :

SET @incoming_name = 'abc';
SET @incoming_value = 12;

SELECT * FROM table1 
WHERE (@incoming_name = name OR @incoming_name IS NULL)
AND (@incoming_value = value OR @incoming_value IS NULL)

यह आपको देगा

1        abc       12

एक चर की आपूर्ति के साथ

फिर यदि उपयोगकर्ता इनमें से किसी भी मान के लिए NULL की आपूर्ति करता है, तो यह आपकी खोज में उन्हें छोड़ देगा।

SET @incoming_name = 'abc';
SET @incoming_value = NULL;

SELECT * FROM table1 
WHERE (@incoming_name = name OR @incoming_name IS NULL)
AND (@incoming_value = value OR @incoming_value IS NULL)

यह अभी भी आपको अपेक्षित परिणाम देता है

1        abc       12

बिना किसी चर की आपूर्ति के

यदि उपयोगकर्ता खोज को कम करने के लिए किसी भी चर की आपूर्ति नहीं करता है

SET @incoming_name = NULL;
SET @incoming_value = NULL;

SELECT * FROM table1 
WHERE (@incoming_name = name OR @incoming_name IS NULL)
AND (@incoming_value = value OR @incoming_value IS NULL)

आप सभी परिणाम तालिका से प्राप्त करेंगे

1         abc             12
2         def             13
4         mkg             14
5         pcr             10

अपनी स्क्रिप्ट में चरों का उपयोग करना

इस विधि का उपयोग करने के लिए आपको SET . की आवश्यकता नहीं है MySQL में वेरिएबल नाम, जो केवल प्रदर्शन उद्देश्यों के लिए थे। आप अपने कोड/स्क्रिप्ट से अन्य भाषाओं में भी मान डाल सकते हैं। उदाहरण के लिए PHP और PDO तैयार स्टेटमेंट का उपयोग करना

SELECT * FROM table1 
WHERE (:incoming_name = name OR :incoming_name IS NULL)
AND (:incoming_value = value OR :incoming_value IS NULL)

फिर आप अपने उपयोगकर्ता चर को :incoming_name . से बाँध सकते हैं और :incoming_value और यह आपकी अपेक्षा के अनुरूप खोज करेगा। यदि दोनों में से कोई भी शून्य है, तो यह उन पर छोड़ देगा, अन्यथा खोज में उनकी आवश्यकता होगी।

चेतावनी: मैंने इस कोड का परीक्षण नहीं किया है, यह सिर्फ आपको एक मोटा विचार देने के लिए है कि यह कैसे काम करेगा। यह PHP का उपयोग करता है पीडीओ और तैयार किए गए बयानों के रूप में यहां दस्तावेज

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$stmt = $dbh->prepare("SELECT * FROM table1 
    WHERE (:incoming_name1 = name OR :incoming_name2 IS NULL)
    AND (:incoming_value1 = value OR :incoming_value2 IS NULL)");
$stmt->bindParam(':incoming_name1', $name);
$stmt->bindParam(':incoming_name2', $name);
$stmt->bindParam(':incoming_value1', $value);
$stmt->bindParam(':incoming_value2', $value);

if ($stmt->execute()) {
  while ($row = $stmt->fetch()) {
    var_dump($row);
  }
}

आपको क्वेरी में प्रत्येक परम को एक अलग नाम से बाँधना होगा, यही कारण है कि जब हम एक ही परम को दो बार चाहते हैं तो हमें इसे एक अलग नाम देना होगा (incoming_value1 और incoming_value2 )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL आईडी द्वारा मनमाना क्रम निर्दिष्ट करें

  2. पायथन चुनौतीपूर्ण स्ट्रिंग एन्कोडिंग

  3. मैं SQL का उपयोग करके वैकल्पिक जॉइन कैसे कर सकता हूं

  4. एक इकाई फ्रेमवर्क डेटाबेस कनेक्शन का परीक्षण

  5. क्या MySQL डेटा को टाइटल केस में बदलने का कोई आसान तरीका है?