Тонны поиска S / O до сих пор были чрезвычайно полезны ... и следующее почти работает.Моя проблема в том, что второй SQL-запрос возвращает ВСЕ «ингредиенты» для КАЖДОГО «рецепта», тогда как в рецепте № 1 были ингредиенты A, C, F, а в рецепте № 2 были ингредиенты A, G, H.Как ограничить второй запрос, чтобы возвращать только ингредиенты для рецепта в текущем цикле?Я был бы очень благодарен за помощь мастера PHP / SQL.
Структура БД с отношением «многие ко многим»:
RECIPE (recid, title)
REC_ING (recid, ingid)
INGREDIENT (ingid, ingredient)
Вот мой PHP-код:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "recipe";
try {
$db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$xml = new XMLWriter();
$xml->openURI('stackexch.xml');
$xml->setIndent(2);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('recipes');
$recipe = $db->query("SELECT * FROM recipe");
foreach ($recipe as $row) {
$xml->startElement('recipe');
$xml->startElement('title');
$xml->writeRaw($row['title']);
$xml->endElement();
$ingredient = $db->query("SELECT ingredient FROM recipe, rec_ing, ingredient WHERE recipe.recid=rec_ing.recid AND ingredient.ingid=rec_ing.ingid");
foreach ($ingredient as $subrow) {
$xml->startElement('ingredient');
$xml->writeRaw($subrow['ingredient']);
$xml->endElement();
}
$xml->endElement();
}
$xml->endElement();
$xml->endDocument();
$xml->flush();
?>
И вот что возвращается:
<?xml version="1.0" encoding="UTF-8"?>
<recipes>
<recipe>
<title>Recipe #1</title>
<ingredient>ingredient A</ingredient>
<ingredient>ingredient C</ingredient>
<ingredient>ingredient F</ingredient>
<ingredient>ingredient G</ingredient>
<ingredient>ingredient H</ingredient>
</recipe>
<recipe>
<title>Recipe #2</title>
<ingredient>ingredient A</ingredient>
<ingredient>ingredient C</ingredient>
<ingredient>ingredient F</ingredient>
<ingredient>ingredient G</ingredient>
<ingredient>ingredient H</ingredient>
</recipe>
</recipes>