2015.6.12
2020.1.7

複数のテーブルから取得したデータをJSONで出力

複数のテーブルからデータを取得して、最終的にJSON形式でクライアントに出力する方法をまとめておきます。

バージョン)
 PHP 5.4
 MySQL 5.6.17

詳細

まず以下のようなデータがあったとして

テーブル1(tbl_group)
id(P) name
1 果物
2 野菜

テーブル2(tbl_item)
id(P) group_id name
11リンゴ
21みかん
31バナナ
42レタス
52きゅうり
62バナナ

上記のテーブルから”果物”に該当するデータをすべて取得し、最終的に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;

PHP】関連記事