我花了两个小时试图解决这个问题,但我找不到任何工作。 我有3张桌子:
recipe recipe_ingredient recipe_steps
id id id
name recipe_id recipe_id
description ingredient_name step_description
sort_order ingred_order step_order
如果我只加入食谱和recipe_steps,它可以正常使用
SELECT *
FROM recipe
JOIN recipe_steps ON recipe.id = recipe_steps.recipe_id
如果我尝试加入recipe_ingredient,我会得到一个空数组
SELECT *
FROM recipe
JOIN recipe_steps ON recipe.id = recipe_steps.recipe_id
JOIN recipe_ingredient ON recipe.id = recipe_ingredient.recipe_id
这是我的其余代码:
<?php
$query = "SELECT * FROM recipe JOIN recipe_steps ON recipe.id = recipe_steps.recipe_id JOIN recipe_ingredient ON recipe.id = recipe_ingredient.recipe_id";
$recipe = $mysqli->query($query);
if(!$result){echo mysql_error();}
?>
<?php while($result = $recipe->fetch_assoc()){
//var_dump($result);
$k = 0;
$nr = 1;
$desc = json_decode($result["step_description"],true); ?>
<li>
<h2> <?php echo $result["name"]; ?> </h2>
<p class="recipe_date">22/03/2013</p>
<p class="recipe_date">Categorii:</p>
<p><?php echo $result["description"]; ?></p>
<p>Timp preparare: <?php echo $result["hours"] . " h " . $result["minutes"] . " m"; ?></p>
<?php foreach($desc as $row){ ?>
<p class="list_pasi"><i>Pasul <?php echo $nr; ?></i>: <?php echo $desc[$k]; ?></p>
<?php $k++; $nr++;
} ?>
</li>
<?php } ?>
配方:
recipe_steps:
recipe_ingredients:
答案 0 :(得分:0)
试试这个:
SELECT *
FROM recipe r
JOIN recipe_steps rs
ON r.id = rs.recipe_id
JOIN recipe_ingredient ri
ON r.id = ri.recipe_id;
答案 1 :(得分:0)
我能想到的唯一原因是recipe_ingredient
表是空的。
作为旁注:当它最终起作用时,您将获得每种食谱的步骤和成分的笛卡尔积。你确定这是你真正想要的吗?
答案 2 :(得分:0)
尝试使用LEFT JOIN而不是两个JOIN。