MySQL接続の使用


Mysql 接続の使用法

前の章では、1 つのテーブルのデータを読み取る方法を学習しました。これは比較的単純ですが、実際のアプリケーションでは、多くの場合、複数のデータ テーブルからデータを読み取る必要があります。

この章では、MySQL の JOIN を使用して 2 つ以上のテーブルのデータをクエリする方法を紹介します。

Mysql の JOIN を SELECT、UPDATE、DELETE ステートメントで使用して、複数テーブルのクエリを結合できます。

JOINは、その機能に応じて大きく以下の3つに分類されます:

  • INNER JOIN (内部結合、または同等の結合): 2つのテーブル内のフィールド一致関係のレコードを取得します。

  • LEFT JOIN (左結合): 右側のテーブルに対応する一致するレコードがない場合でも、左側のテーブルのすべてのレコードを取得します。

  • RIGHT JOIN (右結合): LEFT JOIN とは逆に、左のテーブルに対応する一致するレコードがない場合でも、右のテーブルのすべてのレコードを取得するために使用されます。

この章で使用されるデータベース構造とデータのダウンロード: php.sql。

コマンドプロンプトでINNER JOINを使用してください

PHPデータベースには2つのテーブルtcount_tblとphp_tblがあります。 2 つのデータ テーブルのデータは次のとおりです:

次の例を試してください:

インスタンス データをテストします

mysql> use php;
Database changed
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| php_author | php_count |
+---------------+--------------+
| PHP中文网  | 10           |
| PHP.CN    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)
 mysql> SELECT * from php_tbl;
+-----------+---------------+---------------+-----------------+
| php_id | php_title  | php_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | 学习 PHP    | PHP中文网  | 2017-04-12      |
| 2         | 学习 MySQL  | PHP中文网   | 2017-04-12      |
| 3         | 学习 Java   | PHP.CN    | 2015-05-01      |
| 4         | 学习 Python | PHP.CN      | 2016-03-06      |
| 5         | 学习 C      | PHP           | 2017-04-05 |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

次に、MySQL の INNER JOIN を使用します (INNER を省略して JOIN を使用することもできます。その効果は次のとおりです)同じ) 上記 2 つを接続するには tcount_tbl テーブルの php_tbl テーブル内のすべての php_author フィールドに対応する php_count フィールドの値を読み取るテーブルを作成します:

INNER JOIN

mysql> SELECT a.php_id, a.user_author, b.user_count
 FROM user_tbl a INNER JOIN tcount_tbl b ON a.user_author = b.user_author;
+-------------+-----------------+----------------+
| a.user_id | a.user_author | b.user_count |
+-------------+-----------------+----------------+
| 1           | PHP中文网    | 10             |
| 2           | PHP中文网     | 10             |
| 3           | PHP.CN     | 20             |
| 4           | PHP.CN      | 20             |
+-------------+-----------------+----------------+
 4 rows in set (0.00 sec)

上記の SQL ステートメントは次と同等です:

WHERE句

mysql> SELECT a.user_id, a.user_author, b.user_count
 FROM user_tbl a, tcount_tbl b WHERE a.user_author = b.user_author;
+-------------+-----------------+----------------+
| a.user_id | a.user_author | b.user_count |
+-------------+-----------------+----------------+
| 1           | PHP中文网  | 10             |
| 2           | PHP中文网      | 10             |
| 3           |PHP.CN      | 20             |
| 4           | PHP.CN      | 20             |
+-------------+-----------------+----------------+
 4 rows in set (0.01 sec)

img_innerjoin.gif

MySQL LEFT JOIN

MySQLの左結合は結合とは異なります。 MySQL LEFT JOIN は、右側のテーブルに対応するデータがない場合でも、左側のデータ テーブルのすべてのデータを読み取ります。

MySQL LEFT JOIN の適用を理解するために、左側のテーブルとして php_tbl を使用し、右側のテーブルとして tcount_tbl を使用して次の例を試してみてください。

RIGHT JOIN
mysql> SELECT a.user_id, a.user_author, b.user_count 
FROM user_tbl a RIGHT JOIN tcount_tbl b ON a.user_author = b.user_author;
+-------------+-----------------+----------------+
| a.user_id | a.user_author | b.user_count |
+-------------+-----------------+----------------+
| 1           | PHP中文网    | 10             |
| 2           | PHP中文网   | 10             |
| 3           | PHP.CN      | 20             |
| 4           | PHP.CN        | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

RIGHT JOIN は上記の例で使用されており、このステートメントは次のようになります。右側のデータテーブル tcount_tbl を読み取ります。 左側のテーブル php_tbl に対応する php_author フィールド値がない場合でも、選択されたすべてのフィールド データです。

img_leftjoin.gif

MySQL RIGHT JOIN

MySQL RIGHT JOIN は、左側のテーブルに対応するデータがない場合でも、右側のデータ テーブル内のすべてのデータを読み取ります。

MySQL RIGHT JOIN のアプリケーションを理解するために、左側のテーブルとして php_tbl を使用し、右側のテーブルとして tcount_tbl を使用して次の例を試してください。

RIGHT JOIN
mysql> SELECT a.user_id, a.user_author, b.user_count
 FROM user_tbl a RIGHT JOIN tcount_tbl b ON a.user_author = b.user_author;
+-------------+-----------------+----------------+
| a.user_id | a.user_author | b.user_count |
+-------------+-----------------+----------------+
| 1           | PHP中文网   | 10             |
| 2           | PHP中文网    | 10             |
| 3           |PHP.CN     | 20             |
| 4           | PHP.CN    | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+5 rows in set (0.01 sec)

RIGHT JOIN は、上記の例で使用されています。右側のデータ テーブル tcount_tbl のデータ 左側のテーブル user_tbl に対応する user_author フィールド値がない場合でも、選択されたフィールド データ。

img_rightjoin.gif

PHP スクリプトでの JOIN の使用

PHP で mysqli_query() 関数を使用して SQL ステートメントを実行すると、上記と同じ SQL ステートメントを mysqli_query() 関数のパラメーターとして使用できます。

次の例を試してください:

<?php
header("Content-Type: text/html;charset=utf-8");

$dbhost = 'localhost' // mysqlサーバーのホストアドレス
$ dbuser = 'root'; // mysql ユーザー名
$dbpass = 'root'; )
{
die('Connection failed: ' .mysqli_error($conn));
}
//中国語の文字化けを防ぐためにエンコーディングを設定します
mysqli_query($conn, "set names utf8");

$sql = 'SELECT a.php_id , a.php_author, b.php_count FROM php_tbl a INNER JOIN tcount_tbl b ON a.php_author = b.php_author';

mysqli_select_db( $conn, 'php' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('データを読み取れません: ' .mysqli_error($conn));
}
echo '<h2>PHP 中国語 Web サイト MySQL JOIN テスト<h2>';
echo '<table border="1"><tr><td>チュートリアル ID</td><td> ;作成者</td><td>ログイン数</td></tr> ;';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
echo "<tr><td> ; {$row['php_id']}</td> ".
" "< td>{$row['php_author']} </td> ".
" "<td> ['php_count']} </td> ".
" "</tr>";
}
echo '</table>';
mysqli_close($conn);
?>

レンダリング:

Image 3.jpg

推奨される関連ビデオチュートリアル: MySQL 接続の概念と種類