2013-11-14 66 views
0

我有兩個表,第一個存儲餐廳信息和第二個商店的菜餚在每個服務。它們使用res_id鏈接。php和mysql到xml

1)info_main [ID,RES_ID,RES_NAME,res_pc] 2)菜[ID,dishName,價格,RES_ID(外鍵)

我的SQL查詢

$query = "SELECT * FROM info_main LEFT JOIN dishes ON info_main.res_id = dishes.res_id"; 

我將查詢結果插入一個可以正常工作的xml文件中。下面是代碼:

這項工作很好但是如果餐廳有3個菜在數據庫中,然後XML創建3個節點:事情是這樣的:

xml file putput

我想要的XML結構像

<detail1> 
<resdetails name="spoted dog" id="xyz" pc="xyz"/> 
<dishdetails name="bean burger" price="1" /> 
<dishdetails name="cheese and tomato panini" price="3" /> 
<dishdetails name="veg salad" price="2" /> 
</details1> 

我不知道如何實現上述XML結構的方式。非常感謝您的幫助。由於

+0

所以......你只是想要所有的行中的一部分''? –

+0

您需要循環一次才能創建您的關鍵數據,即重新調配,然後再次循環將菜餚帶出。或者檢查使用的最後一個水庫名稱,以便它不重複它 – Dave

回答

0

Atlast我得到了那個工作,我用了兩個查詢,一個得到不同的restarant和其他獲得菜名。我在主循環中使用循環。下面是代碼。

$query = "SELECT DISTINCT * FROM info_main"; 

$result = mysql_query($query); 


if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
header("Content-type: text/xml"); 

echo '<markers>'; 

// Iterate through the rows, printing XML nodes for each 
while ($row = @mysql_fetch_assoc($result)){ 
    $id=$row['res_id']; 
    // ADD TO XML DOCUMENT NODE 
    echo '<marker> '; 

     echo '<detail1>'; 
     echo '<resdetails '; 
      echo 'name="' . parseToXML($row['res_name']) . '" '; 
      echo 'id="' . parseToXML($id) . '" '; 
      echo 'pc="' . parseToXML($row['res_pc']). '" '; 
     echo '/>'; 

     $dishes = "SELECT * FROM dishes WHERE res_id = '" . $id . "'"; 

     $dish = mysql_query($dishes); 

     while ($row2 = @mysql_fetch_assoc($dish)){ 
      $id2 = $row2['res_id']; 

      echo '<dishdetails '; 
       echo 'name="' . parseToXML($row2['dishName']) . '" '; 
       echo 'price="' . parseToXML($row2['price']) . '" '; 
      echo '/>'; 

     } 

     echo '</detail1>'; 

     echo '</marker>'; 
    } 
echo '</markers>'; 
1
$query = "SELECT * FROM info_main LEFT JOIN dishes ON info_main.res_id = dishes.res_id"; 
$result = mysql_query($query); 

if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
header("Content-type: text/xml"); 

echo '<markers>'; 

// Iterate through the rows, printing XML nodes for each 
$resname = ""; 
while ($row = @mysql_fetch_assoc($result)){ 
    // ADD TO XML DOCUMENT NODE 
    if ($resname!=$row['res_name']) { 
    //restname isn't populated or doesn't match current so output new headers 
    echo '<marker> '; 
     echo '<detail1>'; 
     echo '<resdetails '; 
      echo 'name="' . parseToXML($row['res_name']) . '" '; 
      echo 'id="' . parseToXML($row['res_ID']) . '" '; 
      echo 'pc="' . parseToXML($row['res_pc']). '" '; 
     echo '/>'; 
    } 
     //this bit needs to always happen 
     echo '<dishdetails '; 
      echo 'name="' . parseToXML($row['dishName']) . '" '; 
      echo 'price="' . parseToXML($row['price']) . '" '; 
     echo '/>'; 


    if ($resname!=$row['res_name']) { 
    //restname isn't populated or doesn't match current so output new headers 
     echo '</detail1>'; 

     echo '</marker>'; 
    } 
    $resname = $row['res_name']; //set resname to this res_name as this is our check to see if we've already put out required headers for this item that way every change it'll put this back in 
    } 

像這樣的東西(注可能需要一些整理)

+0

我試過這個代碼,它給了我在docuemnt結尾的太多信息的錯誤。當我看到XML構建。這個結構就像這不是我想要的 – Ash

+0

太多的信息在文檔的末尾是一個未封閉的標籤或文檔結尾的回車也應該已經把detail1標籤內的碟子細節看起來像resdetails標籤沒有關閉需要一個/因爲我說它的關閉不是100%,雖然需要一些整理,但它的90% – Dave

+0

抱歉@Dave,你是對的,標記標籤在最後未被封閉,我的錯,但是結構和上面提到的一樣:(你可以看看這個:http://talentedash.co.uk/veggps/php_to_xml.php – Ash

0

對於結構只是這樣做:

echo '<marker> '; 

    echo '<detail1>'; 

while ($row = @mysql_fetch_assoc($result)){ 

echo '<dishdetails '; 
     echo 'name="' . parseToXML($row['dishName']) . '" '; 
     echo 'price="' . parseToXML($row['price']) . '" '; 
    echo '/>'; 

} 

echo '</detail1>'; 

    echo '</marker>'; 

所有這一切真的是不同的,是讓我感動的一部分你的代碼不在while循環中。

+0

但是這對於多重限制器來說不起作用,因爲他使用了連接,因此他將爲每個添加的菜餚返回相同的資源細節,因此他只需要在新的res_name的第一次迭代中放置detail1標籤,其餘的將保留一樣。 – Dave

+0

你的權利,沒有想到通過,只是看着「他想要什麼」。戴夫的答案在上面100%正確。 –