我有两张桌子,dishes
和days_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框中的结果但不起作用。
我在这里完全迷失了。我非常感谢任何帮助。
谢谢
答案 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 />";
}
}