2017-03-07 2 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

첫 번째 쿼리에서 하나의 행만 선택하면 'fetchAll'이 필요하지 않습니다. – RiggsFolly

+0

SELECT * 내 첫 번째 쿼리 –

답변

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 유형의 객체를 사용할 수 없습니다. 행 17 : $ data [$ key] -> weeks [] = $ stmt-> fetchAll (PDO :: FETCH_OBJ); –

+0

수정 시도하십시오 – RiggsFolly

+0

동일한 치명적인 오류 : /home/villabul/domains/yazlikvillabul.com/public_html/uyelik/test.php 온라인 17에 stdClass 유형의 객체를 배열로 사용할 수 없습니다. –