Querying the Database (الاستفسار من قاعدة البيانات)

الان لدينا بعض البيانات في قاعدة البيانات التي قمنا بأنشاءها ونود ان نعرضها على الزوار في موقعنا
فكيف يتم ذلك ؟ فالنتذكر ما قمنا بشرحه في بداية الدرس وهو الامر SELECT
انظر لكيفية عملة بالطريقة الصحيحة والمفصلة ...


كود PHP:
                       SELECT [fieldname
AS [
alias
FROM [tablename
WHERE [criteria
ORDER BY [fieldname to sort on
LIMIT [offsermaxrows
لا تتفاجأ من الكود فهو بسيط وسترى ذلك بعينك لنشرحه الان كلمة كلمة..

SELECT [fieldname] : هذا الامر يقوم بأختيار الحقل الذي تريد عرض بياناته
واذا كنت تريد عرض جميع الحقول ما عليك سوا اضافة * اي نجمة مكان fieldname
تذكر بأن fieldname تعني اسم الحقل المراد اختياره

AS [alias] : بهذا الامر يمكنك دمج عدة حقول في حقل واحد واستدعائها في متغير واحد كبير مثلا

كود PHP:
                       SELECT first_name last_name AS full_name ... ORDER BY full_name... 
ملاحظة : لايمكنك استخدام AS مع WHERE

FROM : في هذا الجزء البسيط تحتاج فقط لكتابة اسم الجدول الذي تريد احضار البيانات منه

WHERE : ستشرح لاحقا مع المثال

ORDER BY : استخدم هذا الامر اذا كنت تريد ترتيب البيانات في الحقول
واذا كنت تريد ان تظهر الحقول مرتية تنازليا اضف DESC

LIMIT : هذا الخيار يسمح لك بأختيار الحد الذي تريد جلبه من البيانات مابين وبين مثلا
LIMIT 9, 10
هذا الامر يظهر لك المدخلات من 10 الى 19 يستخدم مثلا عندما تقوم ببرمجة سكريبت
ويوجد خيار يسمح للمستخدم بالوصول الى الصفحة التالية مثلا عند فتح موضوع يوجد به اكثر من صفحة
فبأمكانك من خلال هذا الخيار عند ضغط العضو على رقم الصفحة ان ينتقل لها...

كانت هذه مراجعة بسيطة لما قمنا بتعلمة في الدرس السابق والان لنكمل على بركة الله

WHERE , oh WHERE

الجملة WHERE تستحق ان يكون لها قسم مخصص بها لأنها لب الاستفسارات,
WHERE تشبة الاخ الكبير الذي يمكنه بالفعل القيام بأشياء مفيدة جدا ,
SELECT هي من يخبر MySQL اي حقل تريد ان تعمل عليه ,
WHERE هي من يخبر MySQL اي بيانات تريد استرجاعها او العمل عليها
وتستخدم بالطريقة التالية:


كود PHP:
                       SELECT FROM customers  
//يسترجع كل المعلومات الموجوده في حقل customers 

SELECT FROM customers WHERE gender "Male" 
//يسترجع كل البيانات الموجوده في الحقل السابق وتخص الذكور فقط 
بعض الملاحظات المهمة:
** عمليات المقارنة هي قلب جملة WHERE وهي التالية:

كود PHP:
                       =,<,>,=<,=>,!= 
LIKE و % : مع هذه الخيارات يمكنك ان تقوم بالبحث عن اي شيء تريد
ارقام او احرف او نصوص وتستخدم بالطريقة التالية:

كود PHP:
                       SELECT FROM products WHERE description LIKE "%shirt%" 
في هذه الجملة قمنا بالبحث عن كلمة shirt وعند وضع هذه العلامة % بأولها
فأنها تقوم بالبحث عن ما قبل كلمة shirt مثلا t-shirt او blue shirt
ووضعها ما بعد كلمة shirt فأنها تقوم بالبحث عن ما بعد كلمة shirt مثلا no shirt here

** العمليات المنطقية : مثلا

كود PHP:
                       SELECT *FROM products WHERE description LIKE "%shirt%" AND price 25 
في هذه الجملة نبحث عن الحقول التي تحتوي على shirt و (AND) سعرها اقل من 25

لننتقل الان الى مثال تطبيقي لنقم برؤية كيفية عمل هذه الجملة...

افتح ملف جديد وقم بتسميتة select.php واكتب به الكود التالي:

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

اولا قمنا بالاتصال بقاعدة البيانات وثم قمنا بالتأكد من اختيار قاعدة البيانات
وبعدها قمنا بتعيين متغير اسمه query قمت بأختيار الحقول movie_name و movie_type
فقط ومن ثم قمت بأخبار الخادم من اي جدول تريد البيانات وكان movie
ومن ثم وضعت شرط بأن يحضر البيانات عندما يكون الحقل movie_year اكبر من 1990
وبعدها طلبت من الخادم ان يقوم بترتيب البيانات حسب الmovie_type
وذلك من خلال "ORDER BY movie_type"
وبعدها جمعنا كل الحقول عن طريق الدالة mysql_query
وبعدها قمت بتكرار النتائج لتستطيع كتابتها
واحده تلو الاخرى عن طريق while
ولقد قمت هنا بتخزين النتائج داخل مصفوفة اسمها $row
بأستخدم الداله mysql_fetch_array
ومن ثم قمت بأستخراجها جميعها عن طريق extract function
ومن ثم قمت بطباعة ما تحتاجه لاحظ انك قمت بوضع
النتائج الخارجة من extract بداخل
المتغيرات $movie_name والاخر movie_type لاحظ انه عندما تقوم بتغير اسماء هذه المتغيرات
سيحدث لديك خطأ حاول تغيير اسم المتغير وسترى ما الخطأ الناتج ^^

حسنا استخدمنا في المثال السابق جملة التكرار while لما لا نستخدم for each ولنرى الفرق

العمل مع مصفوفات البيانات (foreach)

لنقم الان بفتح ملف select.php ونقوم بالتعديل التالي عليه

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي


ستلاحظ بأنك عند تشغيل الملف بأن النتائج التي ظهرت هي نفسها في المثال السابق
ولكن الاختلاف انه لا يوجد شرطه بين الرقم واسم الفيلم
والسبب هو لأننا استخدمنا mysql_fetch_array بالحقيقه يكون قد رجع منها قيمتين
واحدة للفهارس او المفاتيح بالجدول والاخرى لعدد الفهارس
وبهذه الدالة mysql_fetch_assoc قمنا بأخذ المتغير $results وارجعناه بقيمتين
ولكن داخل مصفوفة واحدة .
اي اننا قمنا بأخذ القيم التي طلبناها في query ووضعناها في results ومن ثم حولناها الى
مصفوفة واحده فقط ولكن يوجد بها قيمتين وطلبنا من المتصفح اظهارهما.

لنقم الان بأستخدام foreach لبناء جدول ووضع به البيانات التي نريدها

قم اولا بفتح ملف جديد واكتب به الكود الموجود بالصورة واحفظه بأسم select2.php

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

سترى الان جدولا يحتوي على بعض القيم التي قمنا بطلبها اي اننا بالبداية
قمنا بأستدعاء القيم وقمنا برسم جدول كما سبق وطبقنا مثالا عليها وهو جدول الضرب
ومن ثم قمنا بوضع جملة التكرار لجلب القيم وخزناها في القيمة value وقمنا بطباعتها
سهلة لا تحتاج لشرح اكثر من هذا لأنها كلها تطبيق على دروس سابقة..

ولكن هل تلاحظ ان القيم التي احضرناها من الجدول هي ارقام نوع الفيلم رقم وممثلة رقم ومنتجة رقم
حسنا ماذا لو اردنا ان نقوم بطلب القيم كما هي مكتوبة بالجدول داخل قاعدة البيانات
هذا ما سأشرحة بعد قليل ..

A Tale of Two Tables
كما سبق وتكلمنا عن استرجاع القيم او طلبها كما هي مكتوبة في الجدول المخصص لها
فلنأخذ مثلا movietype نوع الفيلم كما شاهدتم في المثال السابق كان مجرد ارقام
فكيف يمكننا ان نحضره من جدولة المخصص ونضعه بدلا من هذه الارقام انظر للكود التالي:


كود PHP:
                       $query "SELECT customers.name, orders.order_total 
         FROM customers,orders 
        WHERE customers.cust_ID = orders.cust_ID"

في الكود السابق طلبنا customers name من جدول customers
و order_total من جدول orders بحيث يكون cust_ID في جدول الـcustomers
مساوي للحقل cust_ID من جدول orders .

اذا كان cust_ID يساوي 123 سترى بأن كل الـ order_total لكل الطلبات في جدول orders
قد تم استدعائها .
وايضا ليس من الضرورة ان يكون اسماء الحقول متساوي فيمكنك مثلا عمل التالي:
WHERE customers.email = orders.shiptoemail

لنرى الان مثالا تطبيقيا على ما سبق ..

افتح الملف select2.php وقم بعمل التعديلات التالية عليه..

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

قم بفتح الملف في المتصفح وانظر للأختلاف الذي حصل
قام الملف بأستدعاء اسم الفلم والنوع الخاص به وعرضة على المتصفح
انجاز رائع اليس كذلك ^^

Joining Two Tables
يوجد تشابة بين حياتنا وبين الكود البرمجي فنستطيع ان نربط اي شيئين ببعضهما البعض
وايضا في الكود البرمجي نستطيع ربط اي جدولين في قاعدة البيانات وذلك يكون بأستخدام JOIN

الدالة JOIN تقوم بمنحك تحكم كبير بروابط قاعدة البيانات الخاصة بك لربط الجداول ببعضها بشكل كبير

لنأخذ هذا المثال ولنقم برؤية مخرجاته ^^

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي


قم بتشغيل الملف بالمتصفح الان وانظر للنتيجة^^

سترى بأن النتائج هي ذاتها التي رايناها في المثال السابق ببساطة لقد قمت بترتيب كل الحقول
التي تريد رؤيتها ..

بالبداية قمنا بطلب العبارة SELECT :

SELECT movie_name, movietype_label

ومن ثم قمت بأخبار الـ Mysql اي جدول تريد ان يحضر منه المعلومات ومن ثم
قمت بوضع نوع الرابط التي تريده بينهما :

FROM movie
LEFT JOIN movietype

استخدمنا هنا LEFT لنخبر الخادم بأن الجدول movietype هو التابع للجدول movie

ومن ثم قمت بأخبار الخادم بالحقول التي تريد ربطها ببعضها وكانت بأستخدام

ON movie_type = movietype_id

سيتم شرحها بشكل مفصل بالدروس القادمة ولكن عليك الان معرفة ما قمت بشرحة في هذا المثال البسيط

وبهذا الدرس نكون قد انتهينا من الوحدة الثانية ولكن لم ننتهي بعد من قواعد البيانات
ولا من php فتذكروا بانها بحر واسع وفيه العديد من الاسرار

عنوان فصلنا القادم هو استخدام الجداول في اظهار البيانات ^^

وفي مشاركتي القادمة سأضع لكم تطبيقا جميلا وبسيطا على هذه الدروس ^^

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي


اتمنى لكم التوفيق من كل قلبي واتمنى ان اكون قد اوصلت المعلومة بالشكل المناسب

والسلام

التدريب بيكون كالتالي

اولا قم بأختيار الافلام الكوميدية فقط comedy من جدول movie

وقم بعرض اسم الفيلم والسنة التي انتج فيها movie_name , movie_year

وقم بترتيبهم ترتيبا ابجديا اكيد التطبيق سهل وخفيف ^^