it-swarm.asia

بالنظر إلى أن db_select أبطأ بكثير من db_query ، فلماذا أريد استخدامه؟

للحصول على خلفية هذا ، يرجى الاطلاع على http://drupal.org/node/1067802 .

بالنظر إلى كل ذلك ، ما المواقف الموجودة التي قد أرغب فيها في استخدام db_select () ، أو هل يجب أن أعتمد فقط على db_query؟

69
Chris Cohen

هناك 5 أسباب لاستخدام SelectQuery

  • أنت تقوم ببناء استعلامات ديناميكية مع عدد متنوع من الشروط ، والانضمام ، والحقول ، وما إلى ذلك. انظر field_read_fields () للحصول على مثال.

  • تريد استخدام ما يسمى موسعات . موسعات الأمثلة هي PagerDefault (يستبدل pager_query () ) و TableSort (يستبدل tablesort_sql () ). هذه تسمح بإضافة وظائف إضافية إلى SelectQuery. انظر أيضًا كيف تصنع جداول قابلة للفرز مع جهاز النداء ببيانات من جدول مخصص؟ . مثال: node_page_default () .

  • تريد السماح لوحدات أخرى بتغيير الاستعلامات الخاصة بك. ثم يمكنك إضافة ما يسمى العلامات وسيقوم SelectQuery تلقائيًا باستدعاء ربط بديل مطابق لهذه العلامة. أنا أعتمد بشدة على هذا باستخدام وحدة Privatemsg الخاصة بي (قمنا بذلك بالفعل في D6 باستخدام أداة إنشاء استعلامات مخصصة).

  • إذا كنت تريد/تحتاج إلى استخدام نظام node_access لعرض العقد التي يُسمح للمستخدم برؤيتها فقط. ما عليك سوى إضافة علامة "node_access" إلى استعلامك $. هذا يحل محل db_rewrite_sql ().

  • يحتوي SelectQuery على بعض الميزات التي تساعد على جعل التعليمات البرمجية تعمل بنفس الطريقة عبر جميع قواعد البيانات المدعومة. على سبيل المثال هناك SelectQuery :: orderRandom () . وإذا كان لديك شرط LIKE ، -> شرط ("حقل" ، قيمة $ ، "LIKE") سيتأكد من أنه دائمًا مقارنة غير حساسة لحالة الأحرف. في D6 ، كان عليك استخدام LOWER () لذلك الذي كان أبطأ بكثير. لكن AFAIK ، ليس هناك أكثر من هذين الآن.

إذا لم ينطبق أي من هذه الأسباب على حالة معينة ، فاستخدم db_query ().

88
Berdir

أستخدم دائمًا db_select لأنني أفضل سهولة القراءة وقابلية الصيانة وتوافق قاعدة البيانات عبر مكاسب الأداء الصغيرة. علاوة على ذلك ، أعتقد أن الأرقام الواردة في القضية المذكورة تعطي صورة خاطئة للأداء العام. نحن نتحدث عن اختلاف 300 ميكروثانية في طلب بحث ، عند إرجاع أكثر من عمود واحد غالبًا ما يتم تشغيله في النطاق متعدد المللي ثانية. ولن أتفاجأ إذا كان هناك مرة واحدة فقط (تحميل الصف) لمرة واحدة فقط وبالتالي فإن الاختلافات في طلب (صفحة) كامل أقل بكثير.

9
fietserwin

التوثيق حول db_query() يقول:

استخدم هذه الوظيفة لاستعلامات التحديد إذا كانت مجرد سلسلة استعلام بسيطة. إذا كان المتصل أو الوحدات الأخرى بحاجة إلى تغيير الاستعلام ، فاستخدم db_select () بدلاً من ذلك.

9
marcvangend