Как получить данные из двух таблиц MySQL в JSON с помощью PHP - PullRequest
0 голосов
/ 07 декабря 2010
$result=array();
$query = "SELECT * FROM $table";
$result = mysql_query($query, $conn);
while ($table = mysql_fetch_assoc($resouter, MYSQL_ASSOC)){
   $result[]=$table;

Этот код используется для извлечения данных из одной таблицы. Мой вопрос заключается в том, как извлечь данные из двух таблиц в формате json, которые связаны с внешним ключом, т.е., st_id}

, если я хочу получить студенческие записи и все книги, выпущенные этим студентом в формате json.Как можно получить это заранее спасибо

Ответы [ 3 ]

1 голос
/ 07 декабря 2010
$query = 'SELECT students.*, books.* 
      FROM students
      LEFT JOIN books
      ON students.st_id = books.st_id';
$mysql_result = mysql_query($query);
$result = array();
while ($row = mysql_fetch_assoc($mysql_result)) {
   $result[] = $row;
}
return json_encode($result);
1 голос
/ 07 декабря 2010

Вы используете функцию json_encode

будет выглядеть примерно так

$result=array();
$query = "SELECT * FROM $table";
$result = mysql_query($query, $conn);
while ($table = mysql_fetch_assoc($resouter, MYSQL_ASSOC)){
   $result[]=json_encode($table);

или вы можете использовать объединение, как это работает, можно прочитать по следующей ссылке

http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

может выглядеть примерно так

$result=array();
$query = "SELECT * FROM table LEFT JOIN table2 ON table.st_id = table2.st_id";
$result = mysql_query($query, $conn);
while ($table = mysql_fetch_assoc($resouter, MYSQL_ASSOC)){
   $result[]=json_encode($table);

или если у вас есть 2 массива данных вы можете объединить их, используя array_merge и затем json_encode it

0 голосов
/ 07 декабря 2010

Как упомянул Бризер, вы должны использовать здесь соединение, поэтому вы можете попасть в БД только один раз. Поэтому абсолютно не нужно делать несколько запросов. Что касается структурирования данных, я бы сделал что-то вроде этого:

$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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...