在HTML / PHP表MYSQL中对结果进行分类

时间:2015-04-19 21:03:57

标签: php mysql

我有两张桌子,dishesdays_avail,其中dishes包含有关烹饪菜肴的信息,days_avail包含某些菜肴可用日期。

days_avail看起来像这样:

daysid || dishid || monday || tuesday || wednesday || friday

daysid:唯一ID

dishid:来自餐桌的菜肴

周一至周五:布尔

所以,我能做的就是拉菜并显示相关信息以及可用的日期。然而,我想要完成的是根据它们可用的日期对菜肴进行分类。所以像这样:

Monday
dish name
dish desc desc desc

Tuesday
Dish name
dish desc dish desc

我的查询如下:

$sql = "SELECT * FROM dishes JOIN days_avail ON days_avail.dishid = dishes.id WHERE user_id = :cookid ORDER BY days_avail.daysid";
  try {
    $stmt = $db->prepare($sql);
    $stmt->execute(array(
    ':cookid' => $cookid
  ));
}
    catch(Exception $error) {
  echo '<p class="bg-danger">', $error->getMessage(), '</p>';
}

    while($row = $stmt->fetch()) { 
      $dish_name = $row['dish_name'];
      $dish_desc = $row['dish_desc'];
      $dish_price = $row['dish_price'];
      $mon = $row['Monday'];
      $tues = $row['Tuesday'];
      $wed = $row['Wednesday'];
      $thurs = $row['Thursday'];
      $fri = $row['Friday'];
    }

我不能在一天之内将菜肴分组。我尝试过使用if语句(例如:if($ mon == 1){echo&#34; Monday // dish_info,etc&#34;})但这会导致每个菜肴重复标题。

我也尝试过使用java把手来或多或少地运行查询,然后简单地使用#34; stuff&#34; (适当的)div框中的结果但​​不起作用。

我在这里完全迷失了。我非常感谢任何帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

试试这个:)

$sql = "SELECT * FROM dishes JOIN days_avail ON days_avail.dishid = dishes.id WHERE user_id = :cookid ORDER BY days_avail.daysid";
try {
    $stmt = $db->prepare($sql);
    $stmt->execute(array(
        ':cookid' => $cookid
    ));
}
catch(Exception $error) {
    echo '<p class="bg-danger">', $error->getMessage(), '</p>';
}

$dishes = array(
    'mon'   = array(),
    'tues'  = array(),
    'wed'   = array(),
    'thurs' = array(),
    'fri'   = array()
);

while ($row = $stmt->fetch()) { 
    $dish = array(
        'name'  => $row['dish_name'],
        'desc'  => $row['dish_desc'],
        'price' => $row['dish_price']
    );

    $mon   = (bool) $row['Monday'];
    $tues  = (bool) $row['Tuesday'];
    $wed   = (bool) $row['Wednesday'];
    $thurs = (bool) $row['Thursday'];
    $fri   = (bool) $row['Friday'];

    if ($mon) {
        $dishes['mon'][] = $dish;
    }

    if ($tues) {
        $dishes['tues'][] = $dish;
    }

    if ($wed) {
        $dishes['wed'][] = $dish;
    }

    if ($thurs) {
        $dishes['thurs'][] = $dish;
    }

    if ($fri) {
        $dishes['fri'][] = $dish;
    }
}

// iterate over Monday dishes
foreach ($dishes['mon'] as $dish) {
    // $dish['name'], $dish['desc'], $dish['price']
}

// and so on....

答案 1 :(得分:0)

您可以根据可用日期将返回的行放入数组中来执行此操作 -

...your query code...

$days=array('Monday'=>array(),'Tuesday'=>array(),'Wednesday'=>array(),'Thursday'=>array(),'Friday'=>array());

while($row = $stmt->fetch()) { 
    foreach($days as $day=>$array){
        if($row[$day]){
            $days[$day][]=array('dish_name'=>$row['dish_name'],
                                'dish_desc'=>$row['dish_desc'],
                                'dish_price'=>$row['dish_price']);
        }
    }
}

现在只需循环遍历$days数组

foreach($days as $day => $dishes){
    echo "<h2>$day</h2>";
    foreach($dishes as $dish){
        echo $dish['dish_name']."<br />";
        echo $dish['dish_desc']."<br />";
        echo $dish['dish_price']."<br />";
    }
}