Php,Mysql。根据多维数组生成表

时间:2011-06-07 12:37:37

标签: php mysql

我是php的新手,我认为这很容易,因为我在使用php之前已经设法做了很多困难,但不知怎的,我被卡住了。感谢是否有人能够帮助我..

例如,我有三个表:

  • 第一张桌子我拿着食物的名字(它是 子类别表)
  • 第二桌我拿着食物的类型(它 是类别表)
  • 第3桌我每个人都拿着什么 我喜欢吃(主餐桌,相关 到其他两个)

TblFood:

  1. Food_ID;
  2. Food_name
  3. TblTypes:

    1. TYPE_ID;
    2. TYPE_NAME
    3. TblLikes:

      1. PERSON_ID;
      2. Food_ID;
      3. TYPE_ID
      4. 这些表只是我举行的例子,但我认为理解我想要问的内容会更容易。 因此,我需要能够根据TblLikes输出与这些类型相关的食物类型和确切名称。 例如,如果我选择id为Person_id ='1'的人,我需要输出“

        第1个人喜欢:

        水果

        • 苹果
        • 香蕉
        • 桃子
        • 西瓜

        蔬菜

        • 马铃薯

        MEAT

        • 火鸡
        • 猪肉

        • 与此有关的食物的另一个名称
        • 上面的类型

        所以基本上我需要那种类型的食物和食物的名称将基于TblLikes相互关联。

        这就是我到目前为止所做的一切:

        mysql_select_db($database_localhost, $localhost);
        
        $query_likes = " SELECT TblLikes.Person_id, TblLikes.Type_ID, TblTypes.Type_name, TblLikes.Food_ID, TblFood.Food_name
        FROM (TblFood RIGHT JOIN TblLikes ON TblFood.Food_ID = TblLikes.Food_ID) LEFT JOIN TblTypes ON TblLikes.Type_ID = TblTypes.Type_ID
         WHERE TblLikes.Person_id  = '1' ";
        $likes = mysql_query($query_likes, $localhost) or die(mysql_error());
        $row_likes = mysql_fetch_assoc($likes);
        $totalRows_likes = mysql_num_rows($likes);
        ?>
        <table border="1" cellpadding="5" cellspacing="5">
          <tr>
            <td>Types of food</td>
          </tr>
          <tr>
           <?php  for ($i = 1; $i <= sizeof($row_likes['Type_name']); $i++)?>
            <td><?php echo $row_likes['Type_name'];?></td>
          </tr>
         <?php  for ($i = 1; $i <= sizeof($row_likes['Food_name']); $i++) {
             echo $row_likes[$i]['Food_name'];
        
         }?>
        
        </table>
        

        提前谢谢..

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,但我建议您加入3个表并为类型添加group by子句,然后将其另存为数组。然后你应该通过数组运行foreach并从第一个查询中选择而不使用group by子句,但是使用where子句进行食物类型,然后通过另一个foreach运行单个项目。例如:

$query_type_likes = "
    SELECT 
        TblLikes.Person_id, 
        TblLikes.Type_ID, 
        TblTypes.Type_name, 
        TblLikes.Food_ID, 
        TblFood.Food_name
    FROM 
        (TblFood RIGHT JOIN TblLikes ON TblFood.Food_ID = TblLikes.Food_ID) 
        LEFT JOIN TblTypes ON TblLikes.Type_ID = TblTypes.Type_ID
    WHERE 
        TblLikes.Person_id  = '1'
    GROUP BY
        TblLikes.Type_ID
";
$foodType = mysql_query($query_type_likes, $localhost) or die(mysql_error());

foreach ($foodType as $food_Type_Id => $food_Type_Data) 
{
    $query_food_likes = "
        SELECT 
            TblLikes.Person_id, 
            TblLikes.Type_ID, 
            TblTypes.Type_name, 
            TblLikes.Food_ID, 
            TblFood.Food_name
        FROM 
            (TblFood RIGHT JOIN TblLikes ON TblFood.Food_ID = TblLikes.Food_ID) 
            LEFT JOIN TblTypes ON TblLikes.Type_ID = TblTypes.Type_ID
        WHERE 
            TblLikes.Person_id  = '1' AND
            TblLikes.Type_ID = '".mysql_real_escape_string($food_Type_Id)."'
    ";
    $query_food_likes = mysql_query($query_likes, $localhost) or die(mysql_error());

    $html = "<ul>
                <li>$food_Type_Data['Type_name']
                    <ul>";
    foreach ($query_food_likes as $food_likes_Id => $food_likes_Data) 
    {
        $html .= "
                        <li>$food_likes_Data['Food_name']</li>
    }
    $html .= "
                    </ul>
                </li>
            </ul>";
}

echo ($html);