2017-03-07 5 views
-1

jsonを使用してMySQL(PDO)に3つのテーブルを送信します。最初のテーブル ノートのループがあります: 第二表は(フェッチ) まずテーブル(fetchAllの) 第三の表は、この形式にそれを送信する方法テーブル内のJsonテーブル

$stmt1 = $db->prepare("SELECT * FROM data WHERE countid='1'"); 
 
$stmt1->execute(); 
 
$data = $stmt1->fetchAll(PDO::FETCH_OBJ); 
 

 
$stmt2 = $db->prepare("SELECT id,title FROM weeks WHERE id='2'"); 
 
$stmt2->execute(); 
 
$data->weeks[] = $stmt2->fetch(PDO::FETCH_OBJ); 
 

 
$stmt3 = $db->prepare("SELECT id,name FROM user WHERE id='1'"); 
 
$stmt3->execute(); 
 
$data->user[] = $stmt3->fetch(PDO::FETCH_OBJ); 
 

 
$response = new stdClass(); 
 
$response->data[] = $data; 
 

 
echo json_encode($response);

を(フェッチ):

{"data":[ 
 
     {"title":"name of module1", 
 
      "description":"description of module1", 
 
      "weeks":[{"id":1,"title":"Week 01"}], 
 
      "user":[{"id":1,"name":"george"}] 
 
     }, 
 
     {"title":"name of module2", 
 
      "description":"description of module2", 
 
      "weeks":[{"id":2,"title":"Week 02"}], 
 
      "user":[{"id":2,"name":"john"}] 
 
     } 
 
     ] 
 
}

データ: id、name、content、user_id、week、countid;

週間: id、data_id、checkin、checkout;

ユーザー: id、username、name、surname;

data.idは==をweeks.data_id)および(data.user_id == user.id)同じ..

+0

、最初のテーブルには、アレイではなかったです。すべてのコードを配列にするために変更する必要があるので、私は新しい質問をします。質問者は、別の質問で彼に答えることができると答えました。 –

+0

最初のクエリで1行だけを選択しているので、 'fetchAll'の必要はないようです。 – RiggsFolly

+0

SELECT * FROM私の最初のクエリ –

答えて

1

オクラホマので、もう少しコードが必要になりました。 dataの行をすべて取得し、そこのキーを使用して他の2つのテーブルから関連する行を取得する必要があります。

$stmt = $db->prepare("SELECT * FROM data WHERE countid='1'"); 
$stmt->execute(); 
$datas = $stmt->fetchAll(PDO::FETCH_OBJ); 

foreach ($datas as $key => &$data) { 
    // get related weeks data 
    $stmt = $db->prepare("SELECT id,title FROM weeks WHERE data_id=:id ORDER BY id"); 
    $stmt->execute(array(':id'=>$data->id)); 
    $data->weeks = $stmt->fetchAll(PDO::FETCH_OBJ); 

    // get related user data 
    $stmt = $db->prepare("SELECT id,name FROM user WHERE id=:id ORDER BY id"); 
    $stmt->execute(array(':id'=>$data->user_id)); 
    $data->user = $stmt->fetchAll(PDO::FETCH_OBJ); 
} 

echo json_encode(array('data'=>$datas)); 

結果:最初の質問で

{ 
    "data": [ 
     { 
      "id": 1, 
      "title": "name of module1", 
      "description": "description of module 1", 
      "user_id": 1, 
      "week": "1", 
      "countid": 1, 
      "weeks": [ 
       { 
        "id": 1, 
        "title": "Week 01" 
       } 
      ], 
      "user": [ 
       { 
        "id": 1, 
        "name": "chris" 
       } 
      ] 
     }, 
     { 
      "id": 2, 
      "title": "name of module 2", 
      "description": "description of module 2", 
      "user_id": 2, 
      "week": "2", 
      "countid": 1, 
      "weeks": [ 
       { 
        "id": 2, 
        "title": "Week 02" 
       } 
      ], 
      "user": [ 
       { 
        "id": 2, 
        "name": "john" 
       } 
      ] 
     } 
    ] 
} 
+0

致命的なエラー:17行目の/home/villabul/domains/yazlikvillabul.com/public_html/uyelik/test.phpの配列としてstdClass型のオブジェクトを使用できません LINE 17:$ data [$ key] - > weeks [] = $ stmt-> fetchAll(PDO :: FETCH_OBJ); –

+0

修正しました – RiggsFolly

+0

同じ致命的なエラー:/home/villabul/domains/yazlikvillabul.com/public_html/uyelik/test.php 17行目の配列としてstdClass型のオブジェクトを使用できません –

関連する問題