MySQl Joins'i Kullanma
Önceki bölümlerde, bir seferde bir tablodan veri alıyorduk. Bu, basit çekimler için yeterince iyidir, ancak gerçek dünyadaki MySQL kullanımlarının çoğunda, genellikle tek bir sorguda birden çok tablodan veri almanız gerekir.
Tek SQL sorgunuzda birden çok tablo kullanabilirsiniz. MySQL'e katılma eylemi, iki veya daha fazla tabloyu tek bir tabloya bölmeyi ifade eder.
MySQL tablolarına katılmak için SELECT, UPDATE ve DELETE ifadelerinde JOINS'i kullanabilirsiniz. Basit MySQL JOIN'den farklı bir LEFT JOIN örneği de göreceğiz.
Birleştirmeleri Komut İsteminde Kullanma
İki masamız olduğunu varsayalım tcount_tbl ve tutorials_tbl, EĞİTİMLER'de. Şimdi aşağıda verilen örneklere bir göz atın -
Misal
Aşağıdaki örnekler -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
| John Poul | 1 |
| Sanjay | 1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_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>
Şimdi bu iki tabloyu birleştirmek için bir SQL sorgusu yazabiliriz. Bu sorgu, tablodan tüm yazarları seçecektutorials_tbl ve ilgili öğretici sayısını şuradan alır: tcount_tbl.
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a, tcount_tbl b
-> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>
Bir PHP Komut Dosyasında Birleştirme Kullanma
Yukarıda belirtilen SQL sorgusunu PHP komut dosyasında kullanabilirsiniz. Yalnızca SQL sorgusunu PHP işlevine aktarmanız gerekirmysql_query() ve sonra sonuçları her zamanki gibi alacaksınız.
Misal
Aşağıdaki örnek -
<?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.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
mysql_select_db('TUTORIALS');
$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['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"Tutorial ID: {$row['tutorial_id']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
MySQL LEFT JOIN
MySQL sol birleştirme, basit bir birleştirmeden farklıdır. MySQL LEFT JOIN, soldaki tabloya biraz daha fazla önem verir.
Eğer yaparsam LEFT JOIN, Eşleşen tüm kayıtları aynı şekilde alırım ve EK OLARAK, birleşimin sol tablosundaki her bir eşleşmeyen kayıt için fazladan bir kayıt alırım: böylece (benim örneğimde) her YAZARIN bir bahsedilmesini sağlarım.
Misal
LEFT JOIN'i anlamak için aşağıdaki örneği deneyin.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
-> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 2 | Abdul S | NULL |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)
JOINS'e aşina olmak için daha fazla pratik yapmanız gerekir. Bu MySQL / SQL'de biraz karmaşık bir kavramdır ve gerçek örnekler yaparken daha net hale gelecektir.