質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1303閲覧

2つのクエリで取得したmysql_fetch_objectの配列をマージしたい

kphex

総合スコア42

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/07 11:06

###前提・実現したいこと
php, mysqlを使用
2つのクエリで取得し、jsonで結果を返す事を想定

###該当のソースコード

php

1$sql = "SELECT id, name FROM item WHERE id IN(1,2) "; 2$rs = mysql_query($sql); 3$data = array(); 4while($r = mysql_fetch_object($rs)) { 5 $data[] = $r; 6 $item_id = $r->id; 7 $sql2 = "SELECT i.staff_id, s.name staff_name "; 8 $sql2 = "FROM item_staff i "; 9 $sql2 = "LEFT JOIN staff s ON i.staff_id = s.id "; 10 $sql2 = "WHERE i.item_id = ".$item_id." "; 11 while($r2 = mysql_fetch_object($rs2) { 12 $data2[] = $r2; 13 } 14 $data[] = $data2; 15} 16header('Content-type: application/json'); 17echo json_encode($data);

###結果

JSON

1[ 2 { 3 "id":"1", 4 "name":"aaa" 5 }, 6 [ 7 { 8 "staff_id":"100", 9 "staff_name":"田中" 10 }, 11 { 12 "staff_id":"200", 13 "staff_name":"鈴木" 14 } 15 ], 16 { 17 "id":"2", 18 "name":"bbb" 19 }, 20 [ 21 { 22 "staff_id":"100", 23 "staff_name":"田中" 24 }, 25 { 26 "staff_id":"300", 27 "staff_name":"佐藤" 28 }, 29 { 30 "staff_id":"400", 31 "staff_name":"山田" 32 } 33 ] 34]

本来であれば2つのオブジェクトの中にスタッフの配列がそれぞれ挿入されているように結合させたい。
以下の様な

JSON

1[ 2 { 3 "id":"1", 4 "name":"aaa", 5 "staff":[ 6 { 7 "staff_id":"100", 8 "staff_name":"田中" 9 }, 10 { 11 "staff_id":"200", 12 "staff_name":"鈴木" 13 } 14 ] 15 }, 16 { 17 "id":"2", 18 "name":"bbbb", 19 "staff":[ 20 { 21 "staff_id":"100", 22 "staff_name":"田中" 23 }, 24 { 25 "staff_id":"300", 26 "staff_name":"佐藤" 27 }, 28 { 29 "staff_id":"400", 30 "staff_name":"山田" 31 } 32 ] 33 }, 34]

###バージョン
PHP 5.6.30
mysql 5.7.18

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正直セキュリティ的にも問題があると思いましたが、現状のコードだと以下のようにすればよいかと思います。

$sql = "SELECT id, name FROM item WHERE id IN(1,2) "; $rs = mysql_query($sql); $data = array(); while($r = mysql_fetch_object($rs)) { $item_id = $r->id; $sql2 = "SELECT i.staff_id, s.name staff_name "; $sql2 = "FROM item_staff i "; $sql2 = "LEFT JOIN staff s ON i.staff_id = s.id "; $sql2 = "WHERE i.item_id = ".$item_id." "; while($r2 = mysql_fetch_object($rs2) { $data2[] = $r2; } $r->staff = $data2; $data[] = $r; } header('Content-type: application/json'); echo json_encode($data);

すでにmysqlメソッドは非推奨で、PHP7では削除されているのでmysqliメソッドを使うことをおすすめします。
もし、$sqlの中に外部からの値を埋め込むことになる場合はプリペアドステートメントを利用したほうが良いでしょう。

投稿2017/07/07 17:19

編集2017/07/07 17:21
fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kphex

2017/07/10 00:56

有難うございました。 まさに求めていた結果を取得する事ができました。 mysqlメソッド、プリペアードステートメントはそうですね、移行しなければなりませんね。。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問