版本: v2.3.0
WHERE सिंटैक्स
कुछ Medoo विधियां SQL WHERE क्लॉज के समान, रिकॉर्ड को फ़िल्टर करने के लिए
$where तर्क स्वीकार करती हैं। हालाँकि SQL स्थितियाँ जटिल हो सकती हैं और मैन्युअल रूप से लिखे जाने पर SQL इंजेक्शन जोखिम उत्पन्न कर सकती हैं, Medoo WHERE क्लॉज़ को सुरक्षित रूप से बनाने के लिए एक संरचित और अभिव्यंजक तरीका प्रदान करता है।बुनियादी शर्तें
बुनियादी शर्तों का उपयोग करना आसान है। आप अधिक उन्नत तुलनाएँ बनाने के लिए, विशेष रूप से संख्यात्मक मानों के लिए, कॉलम नाम में ऑपरेटर भी जोड़ सकते हैं।
$database->select("account", "user_name", [
"email" => "foo@bar.com"
]);
// WHERE email = 'foo@bar.com'
$database->select("account", "user_name", [
"user_id" => 200
]);
// WHERE user_id = 200
$database->select("account", "user_name", [
"user_id[>]" => 200
]);
// WHERE user_id > 200
$database->select("account", "user_name", [
"user_id[>=]" => 200
]);
// WHERE user_id >= 200
$database->select("account", "user_name", [
"user_id[!]" => 200
]);
// WHERE user_id != 200
$database->select("account", "user_name", [
"age[<>]" => [200, 500]
]);
// WHERE age BETWEEN 200 AND 500
$database->select("account", "user_name", [
"age[><]" => [200, 500]
]);
// WHERE age NOT BETWEEN 200 AND 500
[<>] और [><] ऑपरेटरों का उपयोग डेटाटाइम मानों के साथ भी किया जा सकता है।$database->select("account", "user_name", [
"birthday[<>]" => [date("Y-m-d", mktime(0, 0, 0, 1, 1, 2015)), date("Y-m-d")]
]);
$database->select("account", "user_name", [
"birthday[><]" => [date("Y-m-d", mktime(0, 0, 0, 1, 1, 2015)), date("Y-m-d")]
]);
WHERE ("birthday" BETWEEN '2015-01-01' AND '2017-01-01')
WHERE ("birthday" NOT BETWEEN '2015-01-01' AND '2017-01-01')
आप न केवल एक स्ट्रिंग या संख्यात्मक मान, बल्कि एक सरणी भी पास कर सकते हैं। उस स्थिति में, Medoo एक IN शर्त उत्पन्न करता है।
$database->select("account", "user_name", [
"OR" => [
"user_id" => [2, 123, 234, 54],
"email" => ["foo@bar.com", "cat@dog.com", "admin@medoo.in"]
]
]);
WHERE
user_id IN (2,123,234,54) OR
email IN ('foo@bar.com','cat@dog.com','admin@medoo.in')
निषेधात्मक शर्तें
!=, NOT IN, और IS NOT NULL जैसी नकारात्मक तुलनाएँ बनाने के लिए [!] ऑपरेटर का उपयोग करें।
$database->select("account", "user_name", [
"AND" => [
"user_name[!]" => "foo",
"user_id[!]" => 1024,
"email[!]" => ["foo@bar.com", "cat@dog.com", "admin@medoo.in"],
"city[!]" => null,
"promoted[!]" => true
]
]);
WHERE
"user_name" != 'foo' AND
"user_id" != 1024 AND
"email" NOT IN ('foo@bar.com','cat@dog.com','admin@medoo.in') AND
"city" IS NOT NULL AND
"promoted" != 1
आप किसी शर्त के मान के रूप में select() या get() के परिणाम का भी उपयोग कर सकते हैं।
$database->select("account", "user_name", [
"user_id" => $database->select("post", "user_id", ["comments[>]" => 40])
]);
WHERE user_id IN (2, 51, 321, 3431)
तार्किक शर्तें
तार्किक स्थितियाँ अनेक अभिव्यक्तियों के बीच संबंधों का वर्णन करती हैं। अधिक जटिल क्वेरीज़ बनाने के लिए AND और OR का उपयोग करें।
बुनियादी उपयोग
$database->select("account", "user_name", [
"AND" => [
"user_id[>]" => 200,
"age[<>]" => [18, 25],
"gender" => "female"
]
]);
// Medoo डिफ़ॉल्ट रूप से शर्तों को AND से जोड़ता है। नीचे दी गई क्वेरी इसके समकक्ष है।
$database->select("account", "user_name", [
"user_id[>]" => 200,
"age[<>]" => [18, 25],
"gender" => "female"
]);
WHERE user_id > 200 AND age BETWEEN 18 AND 25 AND gender = 'female'
$database->select("account", "user_name", [
"OR" => [
"user_id[>]" => 200,
"age[<>]" => [18, 25],
"gender" => "female"
]
]);
WHERE user_id > 200 OR age BETWEEN 18 AND 25 OR gender = 'female'
नेस्टेड स्थितियाँ
$database->has("account", [
"AND" => [
"OR" => [
"user_name" => "foo",
"email" => "foo@bar.com"
],
"password" => "12345"
]
]);
WHERE (user_name = 'foo' OR email = 'foo@bar.com') AND password = '12345'
क्योंकि Medoo तार्किक स्थितियों का वर्णन करने के लिए सरणियों का उपयोग करता है, उसी सरणी में डुप्लिकेट कुंजियाँ एक-दूसरे को अधिलेखित कर देंगी।
// यह अपेक्षा के अनुसार काम नहीं करेगा।
$database->select("account", '*', [
"AND" => [
"OR" => [
"user_name" => "foo",
"email" => "foo@bar.com"
],
"OR" => [
"user_name" => "bar",
"email" => "bar@foo.com"
]
]
]);
// [X] SELECT * FROM "account" WHERE ("user_name" = 'bar' OR "email" = 'bar@foo.com')
कुंजी टकराव से बचने के लिए, तार्किक कुंजी नाम के बाद एक टिप्पणी जोड़ें। टिप्पणी # से शुरू होती है और इसमें कोई भी टेक्स्ट हो सकता है।
$database->select("account", '*', [
"AND #टिप्पणियां किसी भी AND या OR लॉजिकल शर्त के साथ इस्तेमाल की जा सकती हैं" => [
"OR #पहली शर्त" => [
"user_name" => "foo",
"email" => "foo@bar.com"
],
"OR #दूसरी शर्त" => [
"user_name" => "bar",
"email" => "bar@foo.com"
]
]
]);
WHERE (
("user_name" = 'foo' OR "email" = 'foo@bar.com')
AND
("user_name" = 'bar' OR "email" = 'bar@foo.com')
)
स्तंभों के बीच तुलना
$database->select("post", [
"[>]account" => "user_id",
], [
"post.content"
], [
// पूरी तरह योग्य कॉलम नामों पर [=], [>], [<] और [!=] जैसे ऑपरेटर लगाकर कॉलमों की तुलना करें।
"post.restrict[<]account.age"
]);
WHERE "post"."restrict" < "account"."age"
LIKE शर्तें
LIKE स्थितियाँ बनाने के लिए
[~] ऑपरेटर का उपयोग करें। इसका उपयोग बुनियादी और तार्किक दोनों स्थितियों में किया जा सकता है।// डिफ़ॉल्ट रूप से, आंशिक मिलान के लिए कीवर्ड के दोनों ओर % लगाया जाता है।
$database->select("person", "id", [
"city[~]" => "lon"
]);
WHERE "city" LIKE '%lon%'
समूह मिलान
$database->select("person", "id", [
"city[~]" => ["lon", "foo", "bar"]
]);
WHERE "city" LIKE '%lon%' OR "city" LIKE '%foo%' OR "city" LIKE '%bar%'
नकारात्मक LIKE शर्तें
$database->select("person", "id", [
"city[!~]" => "lon"
]);
WHERE "city" NOT LIKE '%lon%'
संयुक्त LIKE शर्तें
$database->select("person", "id", [
"content[~]" => ["AND" => ["lon", "on"]]
]);
WHERE ("content" LIKE '%lon%' AND "content" LIKE '%on%')
$database->select("person", "id", [
"content[~]" => ["OR" => ["lon", "on"]]
]);
WHERE ("content" LIKE '%lon%' OR "content" LIKE '%on%')
SQL वाइल्डकार्ड
अधिक उन्नत मिलान के लिए आप SQL वाइल्डकार्ड पैटर्न का उपयोग कर सकते हैं।
$database->select("person", "id", [
"city[~]" => "%stan" // Kazakhstan, Uzbekistan, Turkmenistan
]);
$database->select("person", "id", [
"city[~]" => "Londo_" // London, Londox, Londos, ...
]);
$database->select("person", "id", [
"name[~]" => "[BCR]at" // Bat, Cat, Rat
]);
$database->select("person", "id", [
"name[~]" => "[!BCR]at" // Eat, Fat, Hat, ...
]);
क्रमबद्ध करने की शर्तें
परिणाम सेट को क्रमबद्ध करने के लिए ORDER का उपयोग करें।
// एक कॉलम के आधार पर क्रमबद्ध करें।
$database->select("account", "user_id", [
"ORDER" => "user_id"
]);
// कई कॉलमों के आधार पर क्रमबद्ध करें।
$database->select("account", "user_id", [
"ORDER" => [
// किसी कॉलम को कस्टम क्रम में क्रमबद्ध करें।
"user_id" => [43, 12, 57, 98, 144, 1],
// किसी कॉलम को डिफ़ॉल्ट दिशा में क्रमबद्ध करें।
"register_date",
// अवरोही क्रम में क्रमबद्ध करें।
"profile_id" => "DESC",
// आरोही क्रम में क्रमबद्ध करें।
"date" => "ASC"
]
]);
पूर्ण-पाठ खोज
अधिक उन्नत खोज क्वेरी के लिए पूर्ण-पाठ खोज MySQL द्वारा समर्थित है।
खोज मोड
| natural | प्राकृतिक भाषा मोड में |
| natural+query | क्वेरी विस्तार के साथ प्राकृतिक भाषा मोड में |
| boolean | बूलियन मोड में |
| query | क्वेरी विस्तार के साथ |
// MATCH शर्त।
$database->select("post_table", "post_id", [
"MATCH" => [
"columns" => ["content", "title"],
"keyword" => "foo",
// वैकल्पिक: खोज मोड।
"mode" => "natural"
]
]);
WHERE MATCH (content, title) AGAINST ('foo' IN NATURAL LANGUAGE MODE)
नियमित अभिव्यक्तियाँ
रेगुलर एक्सप्रेशन के साथ मानों का मिलान करने के लिए [REGEXP] ऑपरेटर का उपयोग करें।
$data = $database->select('account', [
'user_id',
'user_name'
], [
'user_name[REGEXP]' => '[a-z0-9]*'
]);
WHERE "user_name" REGEXP '[a-z0-9]*'
SQL फंक्शन
उन्नत मामलों के लिए, आप कच्चे ऑब्जेक्ट के माध्यम से SQL फ़ंक्शन का उपयोग कर सकते हैं। raw दस्तावेज़ में और पढ़ें।
$data = $database->select('account', [
'user_id',
'user_name'
], [
'datetime' => Medoo::raw('NOW()')
]);
WHERE "datetime" = NOW()
सीमा और ऑफसेट
लौटाई गई पंक्तियों की संख्या को सीमित करने के लिए LIMIT का उपयोग करें। आप एक ऑफसेट भी निर्दिष्ट कर सकते हैं.
// पहली 100 पंक्तियाँ लौटाएँ।
$database->select("account", "user_id", [
"LIMIT" => 100
]);
// पहली 20 पंक्तियाँ छोड़ें, फिर अगली 100 लौटाएँ।
$database->select("account", "user_id", [
"LIMIT" => [20, 100]
]);
// Oracle और MSSQL के लिए ORDER BY भी आवश्यक है।
$database->select("account", "user_id", [
"LIMIT" => [20, 100],
"ORDER" => "location"
]);
GROUP BY और HAVING
पंक्तियों को समूहीकृत करने के लिए GROUP का उपयोग करें और समूहीकृत परिणामों को फ़िल्टर करने के लिए HAVING का उपयोग करें।
// एक कॉलम के आधार पर समूह बनाएँ।
$database->select("account", "user_id", [
"GROUP" => "type"
]);
// कई कॉलमों के आधार पर समूह बनाएँ।
$database->select("account", "user_id", [
"GROUP" => [
"type",
"age",
"gender"
]
]);
// पंक्तियों को समूहित करें और समूहित परिणाम को फ़िल्टर करें।
$database->select("account", "user_id", [
"GROUP" => "type",
"HAVING" => [
"user_id[>]" => 500
]
]);