| |||||||
| المدوّنات | البحث | مشاركات اليوم | اجعل كافة المشاركات مقروءة |
|
| | LinkBack | أدوات الموضوع |
| |||||
| [سجن البرمجة] قواعد البيانات ، تعامل من نوع آخر كنت اليوم قد طرحت موضوعاً عن سجن البرمجة وجمعت كل الدروس السابقة فيه لمنع التشتت الكبير ! وهذا هو رابط الموضوع http://www.swalif.net/softs/swalif45/softs216662/ اليكم الدرس المذكور في بداية الموضوع السابق . أولا مرحباً بكم أعزائي سجناء البرمجة فليخرج جميع المساجين من زنزانتهم لأن السجّان php لديه الجديد لكي يقوله لنا ! اليوم سنتكلم عزيزي السجين عن الـ sql وبالأصح Mysql و كيفية إستخدامها بطريقة أسرع مع الـ php عذراً عزيزي السجين لن أشرح كيفية إستخدام هذه الخاصية لأنه كثرت الدروس عن قواعد البيانات وكيفية الإتصال بها . ولكن سنتكلم عن طريقة التعامل معها بطريقة أفضل وأسرع بإذن الله . ولكن لي همسة صغيرة : هذا الدرس أتعبني لأنني جلست يومين أبحث عن مدى صحة المعلومات ووجدت أنها صحيحة بإذن الله هذا نظراً لغيابي الطويل عن البرمجة . حسنا عزيزي السجين الكريم .. أول ما يتبادر لذهنك حينما نتكلم عن الـ sql تتذكر هذا الأمر اللذيذ الجميل الذي لا غنى عنه كود PHP: ولكن تخيّل أنك تبرمج مثلاً برنامج منتديات أو أي برنامج شبيه وتريد عرض المواضيع في مكان واحد ما الذي ستحتاجه من الأمر السابق ؟ ستحتاج عزيزي السجين id الموضوع وعنوانه هذا الموضوع فقط ! (بإعتبار أننا نتكلم أنك تبرمج برنامج منتديات) وبالطبع جدول هذا الموضوع يحتوي على حقول من نوع txt والتي أنت قمت بتحديدها أيضاُ من الأمر اللذيذ الذي كتبناه سابقاً أليس كذلك ؟ حسنا عزيزي فإنك بهذه الطريقة تبطيء برنامجك بشكل ملحوظ ! ممم ستقول لم أفهم المقصود ! سأقول لك ! لماذا لا تقوم بجلب الحقول التي تريدها فقط كي تعرض جميع المواضيع مثلاً في صفحة واحدة والحقول التي تحتاجها - مبدأياً - حقل الـ id وحقل الـ title أليس كذلك ؟ لأنك لا تحتاج لحقل txt الموضوع في الصفحة التي تعرض فيها المواضيع حسناً السؤال المتوقع الآن ما الفرق ؟ الجواب أنه في حالة select * تقوم بعمل بحث كامل في الجدوال بجميع الحقول و أيضا تطلب من القاعدة أن تقوم بجلب الحقول وأسمائها لوحدها ولكن حين تحدد الحقول المراد التحقق عنها فإنك تحدد أريد الاي دي والعنوان -- ولا تتعبيلي حالك يا داتا بيز زيادة عن اللزوم حسناً الناتج المترتب على هذا ! انك حين تقوم بعمل mysql_num_rows ستجلب لك العدد بشكل أسرع و تخفف الضغط عن قاعدة البيانات وأيضاً نفس الموضوع مترتب على من يقوم بعمل count(*) التي تجلب عدد الـصفوف من قاعدة البيانات هكذا بالعادي كود PHP: تجد النتائج متضاربة مرة الأولى أسرع ومرة أخرى الثانية أسرع .. ولكن ينصح بإستخدام mysql_num_rows وهذه وجهة نظر كثير من المبرمجين الذي بحثت في مواقعهم ووجهة نظري خاصة (وهي تقبل الخطأ) حسناً فلنذهب عزيزي السجين إلى ساحة السجن العامة حتى نشم هواء نظيف ونتطرق لشيء آخر حسناً هل أنت مستعد ؟ هنالك شيء آخر جميل ، حينما أقوم بإدراج أمر إلى قواعد البيانات أياً كان هذا الأمر .. وكان هنالك خطأ ما الحل ؟ الحل عزيزي أن تقوم بإظهار رسالة خطأ وتدرج في هذه الرسالة الخطأ الذي حصل بواسطة mysql_error وتدرج رقم هذا الخطأ بواسطة mysql_errno وتدرج كل الأمر الذي طلبته مثلاً كود PHP: حسناً عزيزي السجين الكريم لم ننته بعد ! أتعرف امر mysql_result ؟ إن لم تكن تعرفه فهذا أفضل فتغاضى عن الشرح الذي سأكتبه لمدى سرعته و إستخدامه هكذا يتم استخدامه كود PHP: فقم عزيزي السجين الكريم بإستخدام أمر كود PHP: ![]() الأفضل أن تطلب من الأساس انك تريد عرض البيان الثالث وطبعاً الكود السابق بدائي جداُ فإنك طبعا ستطلب من المتصفح أن يعطيك مثلا رقم الموضوع ومن ثم تطلب من القاعدة رقم الموضوع هذا مثال فقط ! عزيزي السجين هل مللت ؟ إذا أغلق صفحة الموضوع وستذهب للحبس الإنفرادي ! لأنني لم انتهي بعد بالطبع عزيزي السجين تعرف ا لـ mysql_fetch_array و mysql_fetch_assoc وتتسائل ما الفرق بينهما ؟ أن أقول لك أن الإثنيتن نفس السرعة تقريباً ولكن الثانية مثل استخدام الاولى مع MYSQL_ASSOC وهذا يعني حساسية جلب المعلومات بمعنى : في حالة حروف اللغة الانجليزية الحساسية في جلب كابيتل لتر وسمول لتر .. لا أريد الإطالة في شرح هذه ولمن يريد ان يتعلم المزيد فليذهب لهذا العنوان PHP: mysql_fetch_assoc - Manual وإن لم تفهم نقطة معينة فأضف رد بها وسأشرحها أنا أو أحد الإخوان لك عزيزي السجين هنالك شيء آخر mysql_free_result هذه الدالة لمن يقوم باستخدام query ضخم وكبير فهذا يستهلك الذاكرة بشكل كبير ولربما يظهر له خطأ في الاستعلام الذي بعده فإستخدم هذه الدالة ، ولكنها ليست بالدالة ذات الأهمية الكبيرة لأنه - للعلم بالشيء - أي query يتم تحريره عند نهاية البرنامج بشكل تلقائي وأخيراً دالة : mysql_close هنالك الكثير من يقع لأول مرة في استخدام هذه الدلة بعد أمر الاتصال بقاعدة البيانات .. وهذا خطأ كبير ! لأنك تفقد الاتصال ولكن اعتقد ان كل من يتعامل مع قواعد البيانات يعرف هذا ![]() فإن كثرة استخدامها في السكريبت لا يفيدك بل يضر لأنك ستتضطر لإعادة الاتصال بقاعدة البيانات مرة اخرى حتى تقوم بعمل أي أمر تريد ولكن لا بأس من إستخدامها في آخر السكريبت ولكن للعلم أن mysql_connect تفقد إتصالها أصلاُ حين الانتهاء من عرض السكريبت ولكن أمر close لا ينطبق على mysql_pconnect هذا ما لديّ من سجن البرمجة في الوقت الحالي ! والآن فليعود كل المبرمجين إلي سجنهم لأنني تحررت من السجن البرمجي لفترة بسيطة ولكن سرعان ما أعيد القبض عليّ ولتنقضى مدتنا على خير ! ولنا أجمل لقاء | |||||
|
| |||||
|
اود ان اضيف ان بامكانك استخدام اي عمود للبحث فبدل استخدام كود PHP: كود PHP: و بامكانك جعله index بالطريقه التاليه كود PHP:
__________________ لكل من يحب ان يتعلم PHP Mysql و يجد صعوبه مع الكتب نقدم له تعليم بالفيديو تعلم PHP صوت و صوره | |||||
|
| |||||
|
درس وشرح اكثر من رائع بارك الله فيك
__________________ +======================+ شبكة تصميم لتطوير المواقع www.tsmim.com استضافة احجز شركة سعودية www.ahjez.com نماذج تصاميمنا المدفوعة http://www.deernt.com/piadpages.htm +======================+ | |||||
|
| |||||
|
الاخ Dr.Nabhan شكرا على شرحك المطول، انا اود ان الفت الانتباه لى الاستعلام select count(*) from xxx او الاستعلام select count(id) from xxx السرعة في هذا الاستعلام يعتمد كثيرا في نوعية الجداول، اذا كانت MyISAM ستكون اسرع بكثير من InnoDB، ولكن الInnoDB تدعم المفاتيح الاجنبية foreign keys، الامر count يذهب من اول الجدول الى اخره، وكل سجل يمرعلية المؤشر يزيد على الحساب واحد، وهذا في جميع الاحول بطيئة، وهذا يحصل مع جداول الInnoDB، اما جداول الMyISAM لن يعطي اي تحسن ملحوظ لانة اصلا سريع، فضلا لوجود ميتا تاج "اي ان للMyISAM ملف صغير يضع فية هذة البيانات"، والامرselect count(*) from table سيذهب فقط الى هذا الملف ويطبع قيمتة فقط، اما اذا استخدمت select count(id) from table سيطر لعمل بحث وعملي حسابية ليست بالمعقدة، فهو ابطء بقليل من ال(*)count | |||||
|
![]() |
| أدوات الموضوع | |
| |
المواضيع المتشابهه | ||||
| الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
| ما الجديد في MySQL 5 | Mr.eslam | تطوير الويب | 9 | 02-06-2006 01:08 AM |
| الرهيب 2002 لإسترجاع قاعدة البيانات من أي نوع | Adhari.com | تطوير الويب | 95 | 27-05-2006 08:05 PM |
| سري للغاية(1) : جديد الPHP5 في قواعد البيانات | Dr-dre67 | PHP | 44 | 18-07-2005 02:03 PM |
| اختراق قواعد البيانات .... الفزعة | mozarzaa | تطوير الويب | 1 | 21-08-2004 05:26 PM |
| مشاكل بعد نقل قواعد البيانات لم يستطع اي منتدي مساعدتي في حلها !!!!! | THE STUDENT | إصلاح وصيانة المنتديات | 17 | 10-06-2003 05:58 PM |