0

私は 2 つのテーブルを持っています。1 つ目はレストラン情報を保存し、2 つ目はそれぞれで提供される料理を保存します。それらは res_id を使用してリンクされています。

1) info_main [id, res_id, res_name,res_pc] 2) 料理 [id,dishName,price,res_id(Foreign key)]

私のSQLクエリは

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

クエリの結果を正常に動作する xml ファイルに挿入しています。以下はコードです:

    $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
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  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 '/>';

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

      echo '</detail1>';

      echo '</marker>';
    }

これは正常に機能しますが、レストランのデータベースに 3 つの料理がある場合、xml は 3 つのノードを作成します。

xmlファイルの出力

次のような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構造を実現する方法がわかりません。よろしくお願いいたします。ありがとう

4

3 に答える 3

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
    }

このようなもの(整理が必要な場合があることに注意してください)

于 2013-11-14T16:13:02.440 に答える
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 ループからコードの一部を移動したことだけです。

于 2013-11-14T16:13:52.383 に答える