PHP में SQL क्वेरी उपयोग का अनुकूलन
डेटाबेस पर SQL क्वेरी निष्पादित करना एक बहुत धीमा ऑपरेशन है। इसलिए डेटाबेस पर क्वेरी की संख्या को कम से कम करने का प्रयास करना चाहिए।
सबसे आम गलती लूप में कई SQL क्वेरी निष्पादित करना है, जबकि ऐसी वैकल्पिक क्वेरी मौजूद हैं जो वांछित कार्य एक ही कमांड से कर सकती हैं।
आइए एक उदाहरण देखें।
मान लीजिए कि हमें डेटाबेस में रिकॉर्ड के id
का एक सरणी दिया गया है और हमें ऐसे id वाले
रिकॉर्ड हटाने हैं।
बिना ज्यादा सोचे, कोई इस तरह का "अद्भुत" कोड लिख सकता है:
<?php
$ids = [1, 2, 3, 4, 5]; // हटाने के लिए सरणी
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
इस कोड की समस्या यह है कि लूप में कई क्वेरी निष्पादित होती हैं।
कल्पना कीजिए कि सरणी में 100 तत्व होंगे -
डेटाबेस पर 100 क्वेरी निष्पादित होंगी!
वर्णित कार्य की विशेष समस्या यह है कि वेबसाइट विकास के दौरान डेटाबेस छोटा होता है और क्वेरी बहुत तेजी से निष्पादित होती हैं। हालाँकि, होस्टिंग पर वेबसाइट के काम करने के साथ-साथ डेटाबेस बढ़ेगा, क्वेरी धीमी होती जाएंगी, और ऐसा हो सकता है कि लूप में सैकड़ों क्वेरी निष्पादित होने के कारण वेबसाइट लोड होने में एक मिनट से अधिक समय ले!
बहुत कम प्रयास लगाकर, आप ऐसा कर सकते हैं कि केवल एक क्वेरी निष्पादित हो, इस तरह:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // स्ट्रिंग '1,2,3,4,5' प्राप्त करें
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
नीचे दिए गए कोड को अनुकूलित करें:
<?php
$arr = [1, 2, 2, 4, 5];
$res = [];
for ($i = 1; $i < count($arr); $i++) {
$note = mysqli_query($link, "SELECT * FROM users WHERE id=$id");
for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row);
$res[] = $data;
}
var_dump($res);
?>