HI हिन्दी
版本: v2.3.0

select

किसी तालिका से डेटा प्राप्त करें.

select($table, $columns)
select($table, $columns, $where)
select($table, $join, $columns, $where)
रिटर्न वैल्यू
[array] एक सारणी जिसमें पुनर्प्राप्त पंक्तियाँ शामिल हैं।
columns पैरामीटर में * का उपयोग करके सभी कॉलम प्राप्त किए जा सकते हैं, लेकिन बेहतर प्रदर्शन और पठनीयता के लिए केवल आवश्यक कॉलम ही स्पष्ट रूप से देना बेहतर है।
$data = $database->select("account", [
	"user_name",
	"email"
], [
	"user_id[>]" => 100
]);

// उदाहरण परिणाम:
// array(
//  [0] => array(
//	  "user_name" => "foo",
//	  "email" => "foo@bar.com"
//  ),
//  [1] => array(
//	  "user_name" => "cat",
//	  "email" => "cat@dog.com"
//  )
// )

foreach ($data as $item) {
	echo "उपयोगकर्ता: " . $item["user_name"] . " - ईमेल: " . $item["email"] . "<br/>";
}

// सभी कॉलम चुनें।
$data = $database->select("account", "*");

// एक ही कॉलम चुनें।
$data = $database->select("account", "user_name");

// उदाहरण परिणाम:
// array(
//  [0] => "foo",
//  [1] => "cat"
// )

कॉलबैक के साथ पंक्तियाँ प्राप्त करना

डिफ़ॉल्ट रूप से, select() पूरे परिणाम सेट को मेमोरी में लोड करता है और इसे एक सरणी के रूप में लौटाता है।
बड़ी संख्या में पंक्तियों को पुनः प्राप्त करते समय, इससे मेमोरी उपयोग में उल्लेखनीय वृद्धि हो सकती है। यदि आप function ($data) {} जैसे कॉलबैक को अंतिम तर्क के रूप में select() पास करते हैं, तो Medoo पूरे परिणाम सेट को पहले मेमोरी में संग्रहीत करने के बजाय तुरंत प्रत्येक पंक्ति को लाएगा और संसाधित करेगा।
बड़े डेटासेट के साथ काम करते समय यह दृष्टिकोण अधिक मेमोरी-कुशल है।
$database->select("account", ["name"], function ($data) {
	echo $data["name"];
});

$database->select("account", [
	"name"
], function ($data) {
	echo $data["name"];
});
प्रदर्शन बेंचमार्क
निम्नलिखित उदाहरण MySQL डेटाबेस से 1,000, 5,000, और 20,000 पंक्तियों को लाने और आउटपुट करते समय मेमोरी उपयोग की तुलना करता है। मेमोरी उपयोग को memory_get_usage() से मापा जाता है।
// विधि 1
$database->select("account", ["name"], function ($data) {
	echo $data["name"];
});

// इसकी तुलना करें:

// विधि 2
$data = $database->select("account", ["name"]);

foreach ($data as $item) {
	echo $item["name"];
}
विधि 1 विधि 2
1,000 रिकॉर्ड 789 KB 1.2 एमबी
5,000 रिकॉर्ड 1.1 एमबी 3.3 एमबी
20,000 रिकॉर्ड 2.26 एमबी 11.1 एमबी

टेबल JOIN

SQL JOIN क्लॉज कई तालिकाओं से पंक्तियों को जोड़ते हैं। Medoo बिल्डिंग जॉइन के लिए एक सरल सिंटैक्स प्रदान करता है।
$database->select("post", [
	// मुख्य तालिका और जोड़ी गई तालिका के बीच संबंध परिभाषित करें।
	"[>]account" => ["author_id" => "user_id"]
], [
	"post.title",
	"account.city"
]);
post तालिका में कॉलम author_id account तालिका में कॉलम user_id से मेल खाता है।
"[>]account" => ["author_id" => "user_id"]
LEFT JOIN "account" ON "post"."author_id" = "account"."user_id"
यदि दोनों तालिकाएँ समान कॉलम नाम का उपयोग करती हैं, तो आप शॉर्टहैंड फॉर्म का उपयोग कर सकते हैं।
"[>]album" => "user_id"
LEFT JOIN "album" USING ("user_id")
यदि एकाधिक कॉलम दोनों तालिकाओं में समान नाम साझा करते हैं, तो आप उन्हें एक सरणी के रूप में पास कर सकते हैं।
"[>]photo" => ["user_id", "avatar_id"]
LEFT JOIN "photo" USING ("user_id", "avatar_id")
यदि आपको एक ही तालिका में एक से अधिक बार शामिल होने की आवश्यकता है, तो सम्मिलित तालिका के लिए एक उपनाम निर्दिष्ट करें।
"[>]account (replier)" => ["replier_id" => "user_id"]
LEFT JOIN "account" AS "replier" ON "post"."replier_id" = "replier"."user_id"
आप तालिका नाम के साथ कॉलम उपसर्ग लगाकर पहले से शामिल की गई तालिका का भी संदर्भ दे सकते हैं।
"[>]account" => ["author_id" => "user_id"],
"[>]album" => ["account.user_id" => "user_id"]
LEFT JOIN "account" ON "post"."author_id" = "account"."user_id"
LEFT JOIN "album" ON "account"."user_id" = "album"."user_id"
कई JOIN शर्तें
"[>]account" => [
	"author_id" => "user_id",
	"album.user_id" => "user_id"
]
LEFT JOIN "account" ON
"post"."author_id" = "account"."user_id" AND
"album"."user_id" = "account"."user_id"
अतिरिक्त JOIN शर्तें
आप जॉइन क्लॉज में तार्किक शर्तें भी जोड़ सकते हैं।
"[>]comment" => [
	"author_id" => "user_id",
	"AND" => [
		"rate[>]" => 50
	]
]
LEFT JOIN "comment" ON "post"."author_id" = "comment"."user_id" AND "rate" > 50
Raw ऑब्जेक्ट के साथ JOIN
"[>]account" => Medoo::raw("ON <post.author_id> = <account.user_id>")
LEFT JOIN "account" ON "post"."author_id" = "account"."user_id"

डेटा मैपिंग

आप लौटाए गए डेटा की संरचना को अनुकूलित कर सकते हैं। मैपिंग कुंजी को मूल कॉलम नाम से मेल खाने की आवश्यकता नहीं है, और नेस्टेड आउटपुट समर्थित है।
$data = $database->select("post", [
	"[>]account" => ["user_id"]
], [
	"post.content",

	"userData" => [
		"account.user_id",
		"account.email",

		"meta" => [
			"account.location",
			"account.gender"
		]
	]
], [
	"LIMIT" => [0, 2]
]);

echo json_encode($data);
[
	{
		"content": "Hello world!",
		"userData": {
			"user_id": "1",
			"email": "foo@example.com",
			"meta": {
				"location": "New York",
				"gender": "male"
			}
		}
	},
	{
		"content": "Hey everyone",
		"userData": {
			"user_id": "2",
			"email": "bar@example.com",
			"meta": {
				"location": "London",
				"gender": "female"
			}
		}
	}
]

इंडेक्स मैपिंग

यदि आप कॉलम परिभाषा में पहली कुंजी के रूप में कॉलम नाम का उपयोग करते हैं, तो परिणाम उस कॉलम द्वारा अनुक्रमित किया जाएगा।
$data = $database->select("post", [
	"user_id" => [
		"nickname",
		"location",
		"email"
	]
]);
{
	"10": {
		"nickname": "foo",
		"location": "New York",
		"email": "foo@example.com"
	},
	"12": {
		"nickname": "bar",
		"location": "New York",
		"email": "bar@medoo.in"
	}
}

डेटा प्रकार घोषणाएँ

आप चयनित फ़ील्ड के लिए आउटपुट प्रकार स्पष्ट रूप से घोषित कर सकते हैं।
// समर्थित डेटा प्रकार: [String | Bool | Int | Number | Object | JSON]
// [String] is the default type for all output values.
// [Object] represents PHP data serialized with serialize() and decoded with unserialize().
// [JSON] represents valid JSON data and will be decoded with json_decode().

$data = $database->select("post", [
	"[>]account" => ["user_id"]
], [
	"post.post_id",

	"profile" => [
		"account.age [Int]",
		"account.is_locked [Bool]",
		"account.userData [JSON]"
	]
]);

echo json_encode($data);
[
	{
		"post_id": "1",
		"profile": {
			"age": 20,
			"is_locked": true,
			"userData": ["foo", "bar", "tim"]
		}
	},
	{
		"post_id": "2",
		"profile": {
			"age": 25,
			"is_locked": false,
			"userData": ["mydata1", "mydata2"]
		}
	}
]
// किसी ऑब्जेक्ट को डेटाबेस में सहेजें और बाद में उसे वापस प्राप्त करें।
class Foo {
	var $bar = "cat";

	public function __wakeup()
	{
		$this->bar = "dog";
	}
}

$object_data = new Foo();

$database->insert("account", [
	"data" => $object_data
]);

$data = $database->select("account", [
	"data [Object]"
]);

echo $data[0]["data"]->bar;

// unserialize() के दौरान ऑब्जेक्ट की __wakeup() मेथड कॉल होती है।
// इसलिए आउटपुट "dog" होता है।

उपनाम

आप किसी कॉलम या टेबल नाम को उपनाम निर्दिष्ट कर सकते हैं। नाम के टकराव से बचने या आउटपुट को स्पष्ट बनाने के लिए संयुक्त प्रश्नों में यह विशेष रूप से उपयोगी है।
$data = $database->select("account", [
	"user_id",
	"nickname (my_nickname)"
]);

// उदाहरण परिणाम:
// array(
//  [0] => array(
//	  "user_id" => "1",
//	  "my_nickname" => "foo"
//  ),
//  [1] => array(
//	  "user_id" => "2",
//	  "my_nickname" => "bar"
//  )
// )

$data = $database->select("post (content)", [
	"[>]account (user)" => "user_id",
], [
	"content.user_id (author_id)",
	"user.user_id"
]);

// उदाहरण परिणाम:
// array(
//  [0] => array(
//	  "author_id" => "1",
//	  "user_id" => "321"
//  ),
//  [1] => array(
//	  "author_id" => "2",
//	  "user_id" => "322"
//  )
// )
SELECT
	"content"."user_id" AS "author_id",
	"user"."user_id"
FROM
	"post" AS "content"
LEFT JOIN "account" AS "user" USING ("user_id")

DISTINCT

किसी चयनित कॉलम में DISTINCT कीवर्ड जोड़ने के लिए, कॉलम नाम के पहले @ लगाएं।
$data = $database->select("account", [
	// इस कॉलम पर DISTINCT लागू होगा।
	"@location",
	
	"id",
	"name",
]);
SELECT DISTINCT "location", "id", "name"
FROM "account"
विशिष्ट मानों की गणना करने के लिए, एक अपरिष्कृत अभिव्यक्ति का उपयोग करें।
$data = $database->select("account", [
	"unique_locations" => Medoo::raw("COUNT(DISTINCT <location>)")
]);
SELECT COUNT(DISTINCT "location") AS "unique_locations"
FROM "account"