इस पर पृष्ठभूमि के लिए, कृपया http://drupal.org/node/1067802 देखें ।
इन सबको देखते हुए, ऐसी कौन सी स्थितियाँ हैं जहाँ मैं db_select () का उपयोग करना चाहता हूँ, या क्या मुझे db_query पर पूरी तरह निर्भर होना चाहिए?
इस पर पृष्ठभूमि के लिए, कृपया http://drupal.org/node/1067802 देखें ।
इन सबको देखते हुए, ऐसी कौन सी स्थितियाँ हैं जहाँ मैं db_select () का उपयोग करना चाहता हूँ, या क्या मुझे db_query पर पूरी तरह निर्भर होना चाहिए?
जवाबों:
SelectQuery का उपयोग करने के 5 कारण हैं
आप विभिन्न प्रकार की स्थितियों, योगों, क्षेत्रों और इसी तरह की गतिशील क्वेरी का निर्माण कर रहे हैं। उदाहरण के लिए field_read_fields () देखें ।
आप तथाकथित एक्सटेंडर का उपयोग करना चाहते हैं । उदाहरण extenders PagerDefault (बदल देता हैं pager_query () ) और TableSort (बदल देता tablesort_sql () )। ये SelectQuery को अतिरिक्त रूप से कार्यक्षमता जोड़ने की अनुमति देते हैं। यह भी देखें कि आप कस्टम तालिका के डेटा के साथ पेजर के साथ छांटने योग्य टेबल कैसे बनाते हैं? । एक उदाहरण: node_page_default () ।
आप अन्य मॉड्यूल को अपने प्रश्नों को बदलने की अनुमति देना चाहते हैं। फिर आप तथाकथित टैग जोड़ सकते हैं और SelectQuery स्वचालित रूप से उस टैग के लिए संबंधित परिवर्तन हुक को कॉल करेगा। मैं अपने Privatemsg मॉड्यूल के साथ इस पर बहुत भरोसा कर रहा हूं (हमने पहले ही D6 में एक कस्टम क्वेरी बिल्डर के साथ किया था)।
यदि आप केवल नोड्स दिखाने के लिए नोड_केस सिस्टम का उपयोग करना चाहते हैं / करने की आवश्यकता है, तो उपयोगकर्ता को देखने की अनुमति है। बस अपनी $ क्वेरी में 'node_access' टैग जोड़ें। यह db_rewrite_sql () को प्रतिस्थापित करता है।
SelectQuery में कुछ विशेषताएं हैं जो आपके कोड को सभी समर्थित डेटाबेस में समान काम करने में मदद करती हैं। उदाहरण के लिए SelectQuery :: orderRandom () है । और यदि आपके पास एक LIKE कंडीशन है, -> कंडीशन ('फ़ील्ड', $ वैल्यू, 'LIKE') यह सुनिश्चित कर देगी कि यह हमेशा असंवेदनशील तुलना है। D6 में, आपको LOWER () का उपयोग करना था, जो कि बहुत धीमा था। लेकिन AFAIK, अभी इस दो से अधिक नहीं हैं।
यदि इनमें से कोई भी कारण किसी विशिष्ट मामले के लिए लागू नहीं होता है, तो db_query () का उपयोग करें।
दस्तावेज़ के बारे मेंdb_query()
कहते हैं:
यदि यह केवल एक साधारण क्वेरी स्ट्रिंग है, तो क्वेरीज़ के लिए इस फ़ंक्शन का उपयोग करें। यदि कॉलर या अन्य मॉड्यूल को क्वेरी को बदलने की आवश्यकता है, तो इसके बजाय db_select () का उपयोग करें।
मैं हमेशा db_select का उपयोग करता हूं क्योंकि मैं छोटे प्रदर्शन लाभ पर पठनीयता, रखरखाव और क्रॉस डेटाबेस संगतता पसंद करता हूं। इसके अलावा, मुझे लगता है कि उल्लेखित संख्या में दिए गए अंक समग्र प्रदर्शन की गलत छवि देते हैं। हम एक क्वेरी पर 300 माइक्रोसेकंड अंतर के बारे में बात कर रहे हैं, जो कि बहु मिलीसेकंड रेंज में अक्सर चलने वाले एक से अधिक कॉलम को वापस करते हैं। और मुझे आश्चर्य नहीं होगा अगर कुछ 1-बार केवल ओवरहेड (क्लास लोडिंग) हो और इस तरह एक पूर्ण (पृष्ठ) अनुरोध के लिए अंतर बहुत कम हो।