Mysql第二个JOIN返回空数组

时间:2013-09-29 19:31:33

标签: php mysql sql

我花了两个小时试图解决这个问题,但我找不到任何工作。 我有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 } ?>

配方:

enter image description here

recipe_steps:

enter image description here

recipe_ingredients:

enter image description here

3 个答案:

答案 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。