複数のテーブルから取得したデータをJSONで出力
複数のテーブルからデータを取得して、最終的にJSON形式でクライアントに出力する方法をまとめておきます。
バージョン)
PHP 5.4
MySQL 5.6.17
詳細
まず以下のようなデータがあったとして
id(P) | name |
---|---|
1 | 果物 |
2 | 野菜 |
id(P) | group_id | name |
---|---|---|
1 | 1 | リンゴ |
2 | 1 | みかん |
3 | 1 | バナナ |
4 | 2 | レタス |
5 | 2 | きゅうり |
6 | 2 | バナナ |
上記のテーブルから”果物”に該当するデータをすべて取得し、最終的にJSONで出力する場合、以下の通りとなります。
<?php
$dbh = new PDO("mysql:dbname=test_db;host=localhost", "test_user", "test123");
// グループの取得
$sql = " SELECT * FROM tbl_group ";
$sql .= " WHERE id = :group_id ";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(":group_id", 1, PDO::PARAM_INT);
$stmt->execute();
// グループを出力用の変数に格納
$fruitData = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$fruitData = $row;
}
// グループに紐づくアイテムの取得
$sql = " SELECT * FROM tbl_item ";
$sql .= " WHERE group_id = :group_id ";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(":group_id", 1, PDO::PARAM_INT);
$stmt->execute();
// アイテムを出力用の変数に格納
$fruitData["item_list"] = $stmt->fetchAll();
// JSONで出力
header('Content-Type: application/json; charset=utf-8');
echo json_encode($fruitData);
?>
31行目 返却したデータがJSON形式であることをヘッダー情報に指定することで、クライアント側でデータを取得できるようになります。
また、取得したアイテムデータに情報を付加したい場合、以下のようにします。
// アイテムを出力用の変数に格納(下記は、好き嫌いの5段階点数[point]に初期値0を設定する処理)
$itemList = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$row["point"] = 0;
$itemList[] = $row;
}
$fruitData["item_list"] = $itemList;