Как упомянул Бризер, вы должны использовать здесь соединение, поэтому вы можете попасть в БД только один раз. Поэтому абсолютно не нужно делать несколько запросов. Что касается структурирования данных, я бы сделал что-то вроде этого:
$sutdents = array();
$query = "SELECT * FROM table LEFT JOIN table2 ON table.st_id = table2.st_id";
$result = mysql_query($query, $conn);
$bookFields = array_fill_keys(array(
'bk_id',
'author',
'ISBN'
), null);
$studentFields = array_fill_keys(array(
'st_id',
'st_name',
'st_class'
), null);
$students = array();
while ($sutdent = mysql_fetch_assoc($resouter, MYSQL_ASSOC)){
$stId = $student['st_id'];
if(isset($students[$stId]['books'])){
$students[$stId]['books'][] = array_intersect_key($student, $bookFields);
} else {
$students[$stId] = array_intersect_key($student, $studentFields);
$students[$stId]['books'] = array(array_intersect_key($student, $bookFields));
}
}
return json_encode($students);
очевидно, что этот формат отличается, но я предпочитаю вещи, вложенные в логические структуры. Тем не менее, вы могли бы делать именно то, что вы просидели так:
$query = "SELECT * FROM table LEFT JOIN table2 ON table.st_id = table2.st_id";
$result = mysql_query($query, $conn);
$bookFields = array_fill_keys(array(
'bk_id',
'author',
'ISBN'
), null);
$studentFields = array_fill_keys(array(
'st_id',
'st_name',
'st_class'
), null);
$students = array();
$books = array();
while ($sutdent = mysql_fetch_assoc($resouter, MYSQL_ASSOC)){
$stId = $student['st_id'];
if(!isset($students[$stId]){
$students[$stId] = array('student' => array_intersect_key(
$student,
$studentFields
));
}
if(!isset($books[$stId])){
$books[$stId] = array();
}
$books[$stId][] = array('book' => array(array_intersect_key($student, $bookFields));
}
// convert these from assoc to numeric arrays so the come as arrays in json
$books = array_values($books);
$students = array_values($students);
// final hash looks like {students: [{student: {}}, {student: {}}], books: [{book: {}}, {book: {}}]}
return json_encode(array('students' => $students, 'books' => $books));