php استغلال قاعدة البيانات

php MySql : معايير اختيار البيانات

آخر تحيين: 10-01-2015

php MySql : الإستعلام باستعمال المتغيرات php MySQL : أخذ البيانات من القاعدة


بدل اختيار كل البيانات دفعة واحدة من القاعدة ، يمكننا أخذ فقط المعطيات التي نحتاجها وفق معايير محدّدة . في جدولنا السابق "employees" مثلا يمكننا اختيار 5 عمّال فقط أو اختيار التقنيين فقط ، أو اختيار الموظفين ذوو الخبرة الجيدة .
لتحديد خياراتنا نستعمل المعايير التالية :

  • LIMIT : الحد الأقصى
  • WHERE: حيث
  • ORDER BY: ترتيب حسب

أضع أما أعينكم جدولنا :

WHERE : حيث

يتيح لنا هذا المعيار دقة تحديد اختيار البيانات . مثلا إذا أردنا اختيار العمّال التقنيين فقط من جدول employees . يجب أن يكون إستعلامنا كالتالي :
"إختر السطور من الجدول حيث مهمة العامل تساوي "تقني . لترجمة هذا إلى شيفرة SQL :

SELECT * FROM employees WHERE task="تقني"

جرّبوا هذا المثال :

<?php
$response = $db->prepare('SELECT name, task FROM employees WHERE task="تقني"');
$response->execute(); 
$employees = $response->fetchAll();
$response->CloseCursor();

foreach($employees as $employee)
{
 echo 'الإسم :'.$employee['name'].'- المهمة :'.$employee['task'].'<br>';
}
?>

حاولوا الآن تغيير المهمة من "تقني" إلى "موظف" . ستحصلون على السطور الخاصة بالموظفين فقط .
يمكننا أيضا تدقيق الإختيار أكثر باستعمال عاملي "OR" و "AND" . مثلا لاختيار الموظّفين فقط و الحاصلين على النقطة 4 في الخبرة :

SELECT * FROM employees WHERE task="موظف" AND experience=4

ORDER BY

هذا المعيار ، يُتيح لنا ترتيب بياناتنا . مثلا لاختيار الموظّفين مع ترتيب مراكزهم حسب نقطة الخبرة :


SELECT * FROM employees WHERE task="موظف" ORDER BY experience

هذه الشيفرة ستمكّننا من اختيار جميع العمّال الذين مهمتهم هي "موظف" . مع ترتيب السطور ترتيبا تصاعديا ، بدءا من الموظف الأقل خبرة إلى الخبير الحاصل على أعلى نقطة . هذا الترتيب يكون تلقائيا . أمّا إذا أردنا عكسه ، أي ترتيب الموظفين من الخبير إلى الأقل خبرة ، سنستعل "DESC" و تعني "Descendant" أي العد التنازلي :

SELECT * FROM employees WHERE task="موظف" ORDER BY experience DESC

لنأخذ مثالا للتجربة :

<?php
$response = $db->prepare('SELECT name, task, experience
            FROM employees
            WHERE task="موظف" 
            ORDER BY experience DESC
         ');
$response->execute(); 
$employees = $response->fetchAll();
$response->CloseCursor();

foreach($employees as $employee)
{
  echo 'الإسم : '.$employee['name'].' -
       المهمة : '.$employee['task'].' -
       نقطة الخبرة : '.$employee['experience'].'<br>';
}
?>

LIMIT

يساعدنا هذا المعيار على اختيار عدد مُحدّد من سطور الجدول . مثلا لأخذ بيانات 5 عمّال فقط :

SELECT * FROM employees LIMIT 0, 5 

نضيف المعيار LIMIT في آخر الشيفرة ثم نُحدّد عدد السّطور التي نريدها . لاحظتم وجود عددين :

  • 0 : عدد الإنطلاقة .
  • 5 : الحد الأقصى .
    في مثالنا انطلقنا من العدد 0 و بالتالي سنقوم باختيار 5 إدخالات ، إنطلاقا من السّطر الأول .

لماذا بدأنا من العدد "0" و ليس العدد "1" !؟

لأننا نتعامل مع الجداول ، و إن كنتم تذكرون ، فمفتاح الجدول يبدأ دائما من الرّقم 0 . حتى لا يكون لديكم أي خلط أو لبس ، لنترجم استعلامنا السابق ، ترجمة حرفية لنرى ماذا يعني :
SELECT * FROM employees LIMIT 0, 5 = قم باختيار السطور من الجدول ، بدءاً من المفتاح "0" و أصغر من المفتاح "5"

إذا فصلنا هذه الشيفرة "على سبيل المثال فقط" فاستعلامنا سيكون كالتالي :

قم باختيار السطور الآتية من الجدول
employee['0'] => السطر الأول
employee['1'] => السطر الثاني
employee['2'] => السطر الثالث
employee['3'] => السطر الرابع
employee['4'] => السطر الخامس

كما لاحظتم توقفنا عند المفتاح رقم "4" . لأننا نبحث عن المفاتيح الأصغر من الرّقم 5 . يمكنكم التأكد من محتوى الجداول باستعمال التعليمة print_r() . مثال :

print_r($employees);

إذا أردنا مثلا اختيار هذه الخمسة سطور ، لكن بدءا من السّطر 10 :

SELECT * FROM employees LIMIT 10, 15 

لنأخذ مثال جدولنا السابق و نقوم باختيار الخمسة سطور الأولى فقط

<?php
$response = $db->prepare('SELECT id, name, task
            FROM employees
            LIMIT 0, 5
           ');
$response->execute(); 
$employees = $response->fetchAll();
$response->CloseCursor();

foreach($employees as $employee)
{
 echo $employee['id'].' -
      الإسم : '.$employee['name'].' -
      المهمة :'.$employee['task'].'<br>';
}
?>

إليكم هذا المثال يجمع المعايير الثلاثة التي رأيناها

<?php 
$response = $db->prepare('SELECT name, task 
            FROM employees
            WHERE task="موظف" 
            ORDER BY experience DESC
            LIMIT 0, 5
         ');
$response->execute();
$employees = $response->fetchAll();
$response->CloseCursor();
?>
عند استعمال هذه المعايير يجب مراعاة الترتيب التالي : نستعمل "WHERE" أولا ، ثم نختم بالمعيار "LIMIT" .