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)
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 フィールド値がない場合でも、選択されたすべてのフィールド データです。
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 フィールド値がない場合でも、選択されたフィールド データ。
PHP スクリプトでの JOIN の使用
PHP で mysqli_query() 関数を使用して SQL ステートメントを実行すると、上記と同じ SQL ステートメントを mysqli_query() 関数のパラメーターとして使用できます。
次の例を試してください:
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);
?>
レンダリング:
推奨される関連ビデオチュートリアル: MySQL 接続の概念と種類