2013-03-29 3 views
0

저는 제 터미널로 다시 보내려면 JSON에 넣어야하는 다소 복잡한 PHP SQL 쿼리가 있습니다. 누군가 도울 수 있습니까? 나는 이것으로 고투하고 있고 그것을 맞은 것처럼 보일 수 없다. 내 코드는 다음과 같습니다.PHP에서 JSON 형식으로 SQL 쿼리를 중첩했습니다.

//Grab all people living in a city, and for each of those people, grab all of their carsmodel and license plate. My output should be something like [{"firstname":John, "lastname":Smith, "cars":[car1, car2, car3...], "plates":[plate1, plate2, ...]},{"firstname":Jack,"lastname":Hide, "cars":[car1, car2, car3], "plates":[plate1, plate2,...]}] 
$sql = "SELECT id, firstname, lastname FROM residents WHERE residents.city = ?"; 
$q = $connection->prepare($sql); 
$q->execute(array($city)); 

while($row = $q->fetch()) 
{ 
    $sql2 = "SELECT carid FROM cars WHERE userid = ?" 
    $q2 = $connection->prepare($sql2); 
    $q2->execute(array($row[0])); 
    while($row2 = $q2->fetch()) 
    { 
     // What do I do here?! 
    } 
} 

return json_encode(//?); 

어떤 도움을 주셔서 감사합니다!

감사합니다.

답변

1

것은 하나 개의 쿼리에서 그것을 확인 :

SELECT id, firstname, lastname, carid -- and perhaps other cars columns here 
FROM residents 
INNER JOIN cars 
ON cars.userid = residents.id 
WHERE residents.city = ? 
ORDER BY residents.id 

를 다음 PHP 부분에 :

$data = array(); 
$current = array(); 
while($row2 = $q2->fetch()) 
{ 
    if ($current['id'] != $row[0]) { 
     $data[] = $current;   
     $current = array('id' => $row[0], 'firstname' => $row[1], 'lastname' => $row[2]); 
    } else { 
     $current['cars'][] = array(/* row data for car */); 
    } 
} 
array_shift($data); 
return json_encode($data); 
+0

이 최고, 감사합니다! – Jason

1

숫자로 작업하는 대신 가져 오기 모드를 PDO::FETCH_OBJ (또는 PDO::FETCH_ASSOC)으로 설정합니다. 연결시이 작업을 수행 할 수 있지만 fetch도 가능합니다.

$q2 = $connection->prepare("SELECT carid FROM cars WHERE userid = ?"); 
$users = array(); 
while ($row = $q->fetch(PDO::FETCH_OBJ)) { 
    $q2->execute(array($row->id)); 
    $row->cars = $q2->fetchall(PDO::FETCH_OBJ); 
    $users[] = $row; 
} 
return json_encode($users); 
관련 문제