2010-11-09 3 views
-1

hay gays Я хочу получить XML-данные из трех таблиц, хранящихся в mysql. Я использовал приведенный ниже код, он работает нормально, но сначала он извлекает одну запись из первой таблицы, чем повторяет вторую таблицу, и печатает всю таблицу, а затем перебирает третью таблицу и печатает всю таблицу, но я хочу напечатать первую таблицу вместе с соответствующими записями в вторая таблица (не целая таблица), затем из третьей таблицы и т. д. мой код:Как получить XML-данные из трех таблиц 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; 

ответ

1

Существует намного лучший способ выполнить то, что вы делаете. Похоже, вы извлекаете данные из трех разных таблиц, используя три разных SQL-запроса и три вызова в базу данных.

Лучший способ добиться этого - создать таблицу на стороне SQL, используя один запрос. Запросы немного сложнее (вам понадобится JOIN), однако в вашей программе будет намного легче работать. Вероятно, вам также не придется создавать свой документ на лету, используя DOM. Вы могли бы просто создать свой рецепт с помощью SQL, вернуть весь результат и просто перебрать таблицу с результатом.

Смежные вопросы