2013-03-29 3 views
0

У меня есть несколько сложный PHP-запрос, который мне нужно отправить в JSON для отправки обратно на мой терминал. Может кто-нибудь помочь? Я боролся с этим и, похоже, не понимаю. Мой код что-то вроде:PHP вложенный SQL-запрос в формате JSON

//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

Awesome, спасибо! – 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); 
Смежные вопросы