2013-02-20 5 views
2

내 농업과 관련된 Android 앱 사용자가 작물의 이름을 PHP webservice로 보내고 해당 webservice가 해당 자르기에 대한 세부 정보를 반환해야합니다.PHP의 다단계 JSON 배열

다음은 데이터베이스의 샘플 구조입니다.

Crop_Master:Crop_Id , Crop_Name , Seed_Rate , Fertilizer 
Pest: Crop_id , Pest_Name 

이제 PDO의 fetchAll() 함수에 대해 알고 데이터가 단일 테이블에서 오는 경우이를 JSON 배열로 변환합니다.

이렇게 : 여기 데이터는 Crop_Master 테이블에서 제공되며 정상적으로 작동합니다.

$query1="select seed_rate,fertilizer_dosage from crop_master where crop_id='$crop_id'"; 

$res=$db->query($query1); 

$output=$res->fetchAll(PDO::FETCH_ASSOC); 

print(json_encode($output)); 

그러나 데이터가 여러 테이블에서 오는 경우 어떻게 하나의 "출력"배열을 만들 수 있는지 알 수 없습니다. 나는 여러 쿼리를 실행하고 하나의 출력 배열을 만들 수있는 방법 그리고

[ 
    { 
     "seed_rate":"value_from_db" 
     "fertilizer":"value_from_db" 
     "pests": 
       [{"pest_name:"value_from_db"} 
       {"pest_name:"value_from_db"} 
       . 
       . 
       . 
       ] 
    } 
] 

:

가정하자이 같은 JSON 배열을 만들려면?

+0

첫 번째 결과 집합 인 $ output을 가져와 각 출력의 고유 ID를 반복하고 각 결과에 대해 새 쿼리를 실행해야합니다 예를 들어, $ 출력 [해충] –

답변

2

당신은 어떻게, 데이터베이스 구조에 따라 달라집니다 ... 배열 $ 출력 배열 요소 "해충"를 추가하고 그것을 채울 필요하지만, 그래서

$query1="select seed_rate,fertilizer_dosage from crop_master where crop_id='$crop_id'";  
$res=$db->query($query1);  
$output=$db->fetchAll(PDO::FETCH_ASSOC); 

$query2="select pest_name from pests, crop_pests where pests.pest_id = crop_pests.pest_id and crop_pests.crop_id='$crop_id'";  
$res=$db->query($query2);  
$output["pests"]=$db->fetchAll(PDO::FETCH_ASSOC); 

print(json_encode($output)); 

같은 가능성이 뭔가 포인트는 당신이다 $ output 배열의 요소로서 해충 배열을 가질 필요가 있습니다. My $ query2는 당연한 예로 데이터베이스에 맞게 조정해야합니다.

+0

네 .. 그게 내가 원했던 것. 이제 $ output [ 'deseases'] 또는 $ output [ 'soil_types']와 같은 결과 배열을 더 추가 할 수 있습니다. Thanx @Andrei. – apatel