PHPでは、データベースクエリの取り扱いは、毎日の開発において非常に一般的なタスクです。複数のテーブルからデータを取得する必要がある場合、通常、マルチテーブルJoin(結合)クエリを使用します。クエリを実行した後、クエリ結果を簡単に取得する方法がキーになります。この記事では、fetch_all()メソッドを使用してマルチテーブル結合クエリの結果を取得し、サンプルコードと併せて説明する方法を紹介します。
マルチテーブル結合クエリは、複数のテーブルのデータを相関させ、特定の条件に基づいて結果を返すことができます。たとえば、2人のテーブルユーザーと注文があります。すべてのユーザーとそれに対応する注文情報を照会し、 Joinを使用できます。
SELECT users.id, users.name, orders.order_id, orders.amount
FROM users
JOIN orders ON users.id = orders.user_id;
PHPは、MySQLデータベースを操作するさまざまな方法を提供します。ここでは、MySQLI拡張機能を使用し、 fetch_all()メソッドを使用してすべての結果を取得します。
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
?>
<?php
$sql = "SELECT users.id, users.name, orders.order_id, orders.amount
FROM users
JOIN orders ON users.id = orders.user_id";
$result = $mysqli->query($sql);
if (!$result) {
die("クエリに失敗しました: " . $mysqli->error);
}
?>
fetch_all()は、結果のすべての行が一度に設定され、2次元配列を返します。デフォルトのリターンタイプは、 mysqli_num 、つまりインデックス配列です。また、 mysqli_assocを使用して連想配列を取得することもできます。
<?php
$data = $result->fetch_all(MYSQLI_ASSOC);
foreach ($data as $row) {
echo "ユーザーID: " . $row['id'] . ",名前: " . $row['name'] . ",注文ID: " . $row['order_id'] . ",額: " . $row['amount'] . "<br>";
}
?>
<?php
$mysqli->close();
?>
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$sql = "SELECT users.id, users.name, orders.order_id, orders.amount
FROM users
JOIN orders ON users.id = orders.user_id";
$result = $mysqli->query($sql);
if (!$result) {
die("クエリに失敗しました: " . $mysqli->error);
}
$data = $result->fetch_all(MYSQLI_ASSOC);
foreach ($data as $row) {
echo "ユーザーID: " . $row['id'] . ",名前: " . $row['name'] . ",注文ID: " . $row['order_id'] . ",額: " . $row['amount'] . "<br>";
}
$mysqli->close();
?>
マルチテーブル結合クエリは、関連するデータを取得するための効果的な方法です。
MySQLIのQuery()を使用してクエリを実行し、 FETCH_ALL()を使用してすべての結果を一度に取得し、データ処理を簡素化します。
fetch_all()のパラメーターをmysqli_assocに設定することにより、フィールド名を介してデータに簡単にアクセスできます。
この記事がfetch_all()をよりよく理解し、使用してマルチテーブル結合クエリの結果を取得できることを願っています。