Latest web development tutorials

باستخدام ماي اتصال

في الفصول السابقة، فقد تعلمنا أنه إذا قراءة البيانات في جدول، التي هي بسيطة نسبيا، ولكن غالبا ما تحتاج إلى قراءة البيانات من جداول متعددة في تطبيق حقيقي.

هذا الفصل سوف تظهر لك كيفية استخدام الخلية JOIN الاستعلام عن البيانات في اثنين أو أكثر من الجداول.

يمكنك استخدام الخلية في SELECT، UPDATE و DELETE تصريحات للانضمام استفسارات متعددة الجدول المشتركة.

التسجيل وفقا لوظيفة مقسمة إلى الفئات الثلاث التالية:

  • (اتصال داخلي، أو اتصال ما يعادلها) صلة داخلية: الحصول على سجل حقلين في جدول مباريات العلاقات.
  • LEFT JOIN (يسار الاتصال): احصل على جميع السجلات من الجدول الأيسر، الجدول الصحيح، حتى إذا كان هناك أية سجلات مطابقة المقابلة.
  • RIGHT JOIN (اتصال الأيمن): وعلى النقيض من LEFT JOIN، احصل على الجدول الصحيح لكافة السجلات، حتى إذا كان الجدول الأيسر لديه أية سجلات مطابقة المقابلة.

هيكل قاعدة البيانات والبيانات المستخدمة في هذا القسم التحميل: w3big.sql .


استخدام INNER JOIN موجه الأوامر

لدينا جدولين tcount_tbl وw3big_tbl في قاعدة بيانات w3big. اثنين من بيانات جداول البيانات هي على النحو التالي:

أمثلة

جرب الأمثلة التالية:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use w3big;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| w3big_author | w3big_count |
+-----------------+----------------+
| mahran          |             20 |
| mahnaz          |           NULL |
| Jen             |           NULL |
| Gill            |             20 |
| John Poul       |              1 |
| Sanjay          |              1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from w3big_tbl;
+-------------+----------------+-----------------+-----------------+
| w3big_id | w3big_title | w3big_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-24      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-24      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-06      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

والآن نأتي إلى توصيل أكثر من جدولين في الجدول ليصبح w3big_tbl كافة قيم الحقول w3big_count الحقل w3big_author المقابلة لطاولة في tcount_tbl باستخدام ماي INNER JOIN (استخدام يجوز حذف INNER JOIN، نفس التأثير):

mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a INNER JOIN tcount_tbl b ON a.w3big_author = b.w3big_author;
+-----------+---------------+--------------+
| w3big_id | w3big_author | w3big_count |
+-----------+---------------+--------------+
|         1 | John Poul     |            1 |
|         3 | Sanjay        |            1 |
+-----------+---------------+--------------+
2 rows in set (0.00 sec)

فوق عبارة SQL ما يعادل:

mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a, tcount_tbl b WHERE a.w3big_author = b.w3big_author;
+-------------+-----------------+----------------+
| w3big_id | w3big_author | w3big_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>


الخلية LEFT JOIN

ترك الخلية انضمام والانضمام مختلفة. الخلية LEFT JOIN وقراءة كافة البيانات من جدول البيانات على اليسار، وعلى الجانب الأيمن من الجدول حتى لو لم البيانات المناظرة.

أمثلة

جرب الأمثلة التالية، الجدول الأيسر w3big_tbl، tcount_tbl الجدول الصحيح، لفهم الخلية LEFT JOIN التطبيقات:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use w3big;
Database changed
mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a LEFT JOIN tcount_tbl b ON a.w3big_author = b.w3big_author;
+-------------+-----------------+----------------+
| w3big_id | w3big_author | w3big_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           2 | Abdul S         |           NULL |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

تستخدم الأمثلة المذكورة أعلاه LEFT JOIN، البيان يقرأ كل مجال البيانات المحددة لليسار w3big_tbl جدول البيانات، حتى لو لم يكن هناك المقابلة الأيمن الجدول tcount_tbl في قيمة حقل w3big_author.


الخلية RIGHT JOIN

الخلية RIGHT JOIN يقرأ كل البيانات إلى يمين الجدول البيانات على الجانب الأيسر من الجدول حتى لو لم البيانات المناظرة.

أمثلة

جرب الأمثلة التالية، tcount_tbl الجدول اليسار، w3big_tbl الجدول الصحيح، لفهم الخلية RIGHT JOIN التطبيقات:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use w3big;
Database changed
mysql> SELECT b.w3big_id, b.w3big_author, a.w3big_count FROM tcount_tbl a RIGHT JOIN w3big_tbl b ON a.w3big_author = b.w3big_author;
+-------------+-----------------+----------------+
| w3big_id | w3big_author | w3big_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           2 | Abdul S         |           NULL |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

الأمثلة أعلاه استخدام RIGHT JOIN، البيان يقرأ كل حقل البيانات المحددة إلى حق w3big_tbl جدول البيانات، حتى إذا لم يكن هناك جدول مماثل في tcount_tbl اليسار في قيمة حقل w3big_author.


JOIN استخدامها في البرامج النصية PHP

استخدام PHP mysql_query () لتنفيذ عبارات SQL، يمكنك استخدام أكثر من عبارة SQL نفس mysql_query () معلمات وظيفة.

جرب الأمثلة التالية:

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a INNER JOIN tcount_tbl b ON a.w3big_author = b.w3big_author';

mysql_select_db('w3big');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Author:{$row['w3big_author']}  <br> ".
         "Count: {$row['w3big_count']} <br> ".
         "Tutorial ID: {$row['w3big_id']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>