تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يتم اظهار سجلات جدول فقط تلك التي تحتوي على اسم المستخدم ؟؟
#9
(14-10-18, 05:52 PM)sandanet كتب : ماشاء الله على هذا الحل الجميل المقدم من الاستاذ الدوسري لكن السؤال الذي يطرح نفسه هو هل ان استعمال طريقة الـ REPLACE تبطيء عملية اظهار النتائج ام طريقة LIKE '%".$users1."%' في حال كان عدد السجلات كبير جداً ؟؟

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

REPLACE فقط لأنه يوجد مسافة بعد كل فاصلة

بإمكانك الإستغناء عن الأمر REPLACE ولكن يجب أن تظيف مسافة في كلمة لبحث :
PHP كود :
SELECT FROM docs WHERE docs_name != '' AND FIND_IN_SET(' Peter'users) > 0
https://sqltest.net/#300420

طبعاً إذا تبحث عن ملايين السجلات أكيد ستجد ضعف في الأداء , بسبب إستخدام Function في جملة الإستعلام ,  وهو أمر غير مستغرب لأنه تصميم القاعدة ليس مهيء لعمل علاقة بين المستخدم والوثيقة.

إذا كنت ترى الـ mysql profiler وهو الذي يقوم بتسجيل عمليات التنفيذ على قاعدة البيانات
ستجد أن الـ Function يتم إستدعائها في كل سجل مما يعني لو لديك مليون سجل سيتم إستدعائها مليون مرة .
الرد }}}
تم الشكر بواسطة: rnmr


الردود في هذا الموضوع
RE: كيف يتم اظهار سجلات جدول فقط تلك التي تحتوي على اسم المستخدم ؟؟ - بواسطة عبدالله الدوسري - 15-10-18, 06:40 AM

التنقل السريع :


يقوم بقرائة الموضوع: