अपने 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
)