根据两个或更多表中的数据生成单个XML文件

时间:2012-04-25 19:54:22

标签: php mysql html xml

diagram

有两个表,它们有一对(一对多)。有Meals表,其中包含早餐(id: 1),早午餐(id: 2),午餐(id: 3),茶(id: 4),晚餐等值(id: 5)和晚餐(id: 6)。然后有Foods表,其中包含各种食物,每种食物(即汉堡包)通过外键与特定类型的食物(即午餐)相关联。因此,行idfood: 12; idmeal: 3; foodname: "Hamburger"意味着"Hamburger"属于Lunch膳食类型。

我创建了一个XML生成器文件,它将整个Food表的内容提取到XML文件中。问题是我想将idmeal外键值从Meal表中转换为XML中每个食物元素的实际膳食名称。

简单的方法是包含来自Food表的外键号码,但这太神秘了(即汉堡包3次吃掉)。相反,我想根据外键号是什么来做 - XML会将Meals表(mealname)中的正确值插入到带有食物的XML文件中,以便我可以打印像“午餐时间吃汉堡包”之类的东西。

GenerateXML.php:

<?php
require("includes/credentials.php");

$doc = new DOMDocument("1.0");
$node = $doc->createElement("foods");
$parnode = $doc->appendChild($node);

$connection=mysql_connect($host, $usr, $pass);
if (!$connection) {
  die('Not connected : ' . mysql_error());
}

$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}

$query = "SELECT * FROM food";
$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

header("Content-type: text/xml");

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

  $node = $doc->createElement("food");
  $newnode = $parnode->appendChild($node);

  $newnode->setAttribute("idfood", $row['idfood']);
  $newnode->setAttribute("idmeal", $row['idmeal']);
  $newnode->setAttribute("foodname", $row['foodname']);
}

echo $xmlfile = $doc->saveXML();

?>

1 个答案:

答案 0 :(得分:2)

加入查询中的表格以利用您的FK关系。

Select meals.mealname, food.foodname from food join meals on (food.mealid = meals.mealid)