2010-12-07 5 views
0
$result=array(); 
$query = "SELECT * FROM $table"; 
$result = mysql_query($query, $conn); 
while ($table = mysql_fetch_assoc($resouter, MYSQL_ASSOC)){ 
    $result[]=$table;

Ce code est utilisé pour récupérer des données d'une table ma question est de savoir comment récupérer les données de deux tables de JSON qui sont en relation avec l'étudiant clé étrangère c.-à-{ st_id, st_name, st_class} book {bk_id, auteur, ISBN, st_id}Comment obtenir des données de deux tables de MySQL en JSON en utilisant php

si je veux récupérer les dossiers d'étudiants et tous les livres publiés par cet étudiant au format json. Comment obtenir cela grâce à l'avance

+0

updaed ma réponse un coup d'oeil un me dire comment il casseroles – Breezer

Répondre

1

Vous utilisez la fonction json_encode

ressemblerait à quelque chose comme ça

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

ou vous pouvez utiliser une jointure comment une jointure des œuvres peuvent être lus dans ce lien suivant

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

pourrait ressembler à ceci

$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); 

ou si vous avez 2 tableaux de données vous pouvez les fusionner en utilisant array_merge puis json_encode il

+0

je l'utilise déjà cette fonction, mais pour une seule table ma question est de savoir comment puis-je récupérer des données à partir de deux tables – blogger

+0

vous faites une jointure à gauche j'ai posté alink qui peut être très utile prendre un coup d'oeil – Breezer

+0

posté un exemple – Breezer

1
$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); 
0

Comme breezer mentionné vous d'hôtel devrait utiliser une jointure ici si vous ne frappez une fois que la DB. Il n'est absolument pas nécessaire de faire plusieurs requêtes. En ce qui concerne la structuration des données que je ferais quelque chose comme ceci:

$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); 

évidemment ce format est différent, mais je préfère les choses imbriquées dans des structures logiques. Vous pouvez cependant faire exactement ce que vous saked comme ceci:

$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)); 
+0

merci prog mais votre code ne fonctionne pas pour moi – blogger

+0

et si j'utilise 2 requêtes au lieu d'un – blogger

+0

Probablement des fautes de frappe (je viens de corriger 4 d'entre eux - devrait être 'array_fill_keys' pas' array_fill_key'), il peut y avoir d'autres, pas sûr. Si vous voulez poster les messages d'erreur, jetez un oeil. – prodigitalson

Questions connexes