2010-11-09 7 views
-1

hay gays je veux récupérer les données xml de trois tables stockées dans mysql. J'ai utilisé le code ci-dessous, mais il récupère d'abord un enregistrement de la première table puis itère sur la deuxième table et imprime la table entière, puis itère sur la troisième table et imprime toute la table, mais je souhaite imprimer la première deuxième table (pas toute la table) puis de la troisième table et ainsi de suite. mon code estcomment récupérer des données XML à partir de trois tables de mysql

$table_first = 'recipe'; 
$query = "SELECT * FROM $table_first"; 
$resouter = mysql_query($query, $conn); 

$table_second='instructions'; 
$query="SELECT instructions.instruction_id,instructions.instruction_text FROM $table_second"; 
$resinner=mysql_query($query, $conn); 


$table_third='ingredients'; 

$query="SELECT ingredients.ingredient_id,ingredients.ingredient_name,ingredients.ammount FROM $table_third"; 
$resthird=mysql_query($query, $conn); 


$doc = new DomDocument('1.0'); 

$root = $doc->createElement('recipes'); 
$root = $doc->appendChild($root); 




while($row = mysql_fetch_assoc($resouter)){ 


$outer = $doc->createElement($table_first); 
$outer = $root->appendChild($outer); 

foreach ($row as $fieldname => $fieldvalue) { 
    $child = $doc->createElement($fieldname); 
    $child = $outer->appendChild($child); 
    $value = $doc->createTextNode($fieldvalue); 
    $value = $child->appendChild($value); 
    }// foreach 
//while 
$inner = $doc->createElement($table_second); 
    $inner = $outer->appendChild($inner); 
while($row = mysql_fetch_assoc($resinner)){ 
    // add node for each record 


    $inner1=$doc->createElement('instruction'); 
    $inner1=$inner->appendChild($inner1); 
    // add a child node for each field 
    foreach ($row as $fieldname => $fieldvalue) { 
     $child = $doc->createElement($fieldname); 
     $child = $inner1->appendChild($child); 
     $value = $doc->createTextNode($fieldvalue); 
     $value = $child->appendChild($value); 
    } // foreach 
}// while 


$inner=$doc->createElement($table_third); 
    $inner=$outer->appendChild($inner); 

while($row=mysql_fetch_assoc($resthird)){ 



    $inner2=$doc->createElement('ingredient'); 
    $inner2=$inner->appendChild($inner2); 

    foreach($row as $fieldname=> $fieldvalue) 
    { 
     $child=$doc->createElement($fieldname); 
     $child=$inner2->appendChild($child); 
     $value=$doc->createTextNode($fieldvalue); 
     $value=$child->appendChild($value); 
    } 
} 
} 

mysql_close($conn); 
$xml_string = $doc->saveXML(); 
echo $xml_string; 

Répondre

1

Il existe une bien meilleure façon d'accomplir ce que vous faites. Il semble que vous tiriez des données de 3 tables différentes, en utilisant trois requêtes SQL différentes et trois appels à la base de données. La meilleure façon d'accomplir cela serait de construire votre table du côté SQL, en utilisant une seule requête. Les requêtes sont un peu plus compliquées (vous aurez besoin de JOIN) mais le résultat sera beaucoup plus facile à travailler dans votre programme. Vous éviterez probablement d'avoir à créer votre document à la volée en utilisant DOM. Vous pouvez simplement construire votre recette en utilisant SQL, récupérer le résultat entier et simplement parcourir la table avec le résultat.

Questions connexes