Mysql join的使用
Mysql join的使用
到目前为止,我们一次只从一个表获取数据。这对于简单的需要很好,但是在大多数实际的MySQL使用中,通常需要在单个查询中从多个表获取数据。
可以在单个SQL查询中使用多个表。加入MySQL的行为是指将两个或更多的表拆分为一个表。
您可以使用join在select、update和delete语句中加入MySQL表。我们将看到一个left join的示例,它与简单的MySQL连接不同。
在控制台下使用连接:
假设我们有两个表tcount_tbl和kaifaxueyuan_tbl,在教程中。完整的清单如下:
例子
root@host# mysql -u root -p password; Enter password:******* mysql> use kaifaxueyuan; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | kaifaxueyuan_author | kaifaxueyuan_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from kaifaxueyuan_tbl; +-------------+----------------+-----------------+-----------------+ | kaifaxueyuan_id | kaifaxueyuan_title | kaifaxueyuan_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA kaifaxueyuan | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
现在我们可以编写一个SQL查询来连接这两个表。这个查询将从表kaifaxueyuan_tbl中选择所有的作者,并从tcount_tbl获取相应的教程。
在PHP代码中使用join
您可以在PHP脚本中使用上面提到的任何SQL查询。您只需要将SQL查询传递到PHP函数MySQL ( ),然后将以通常的方式获取结果。
例子
<?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.kaifaxueyuan_id, a.kaifaxueyuan_author, b.kaifaxueyuan_count FROM kaifaxueyuan_tbl a, tcount_tbl b WHERE a.kaifaxueyuan_author = b.kaifaxueyuan_author'; mysql_select_db('kaifaxueyuan'); $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['kaifaxueyuan_author']} <br> ". "Count: {$row['kaifaxueyuan_count']} <br> ". "kaifaxueyuan ID: {$row['kaifaxueyuan_id']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
MySQL LEFT JOIN
一个MySQL left join不同于简单的连接,一个MySQL left join对左侧的表进行额外的考虑。
如果我做left join,我会得到所有匹配的记录,此外,我在连接的左边表格中获得了一个额外的记录,从而确保(在我的示例中)每一个作者都会提到:
例子
root@host# mysql -u root -p password; Enter password:******* mysql> use kaifaxueyuan; Database changed mysql> SELECT a.kaifaxueyuan_id, a.kaifaxueyuan_author, b.kaifaxueyuan_count -> FROM kaifaxueyuan_tbl a LEFT JOIN tcount_tbl b -> ON a.kaifaxueyuan_author = b.kaifaxueyuan_author; +-------------+-----------------+----------------+ | kaifaxueyuan_id | kaifaxueyuan_author | kaifaxueyuan_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
你需要做更多的练习来熟悉join。这在MySQL中是一个有点复杂的概念,只有做更多的操作才会清晰的理解。