如何在PHP而不是MySQL中使用groupby或groupconcat?

如何在PHP而不是MySQL中使用groupby或groupconcat?,php,mysql,Php,Mysql,我有一个SQL查询: SELECT mealdesc, group_concat(fooddesc) as fooddesc FROM plan p INNER JOIN mealplan mp ON mp.planid = p.id INNER JOIN meal m ON m.id = mp.mealid INNER JOIN foodmeal fm ON fm.mealid = m.id INNER JOIN food f ON f.id = fm.foodid where userid

我有一个SQL查询:

SELECT mealdesc, group_concat(fooddesc) as fooddesc 
FROM plan p
INNER JOIN mealplan mp
ON mp.planid = p.id
INNER JOIN meal m
ON m.id = mp.mealid
INNER JOIN foodmeal fm
ON fm.mealid = m.id
INNER JOIN food f
ON f.id = fm.foodid
where userid = 2
GROUP by mealdesc
order by mealdesc
结果如下所示:

mealdesc,fooddesc
Meal 1,"egg,egg whites,oatmeal,wheat toast,fruit,berries"
Meal 2,"Isolyze,raw nuts"
Meal 3,"chicken,turkey,yam,baked potato,veggies,medium salad"
Meal 4,"Isolyze,raw nuts"
Meal 5,"veggies,lean red meat,salmon,Chilean Sea Bass,large salad"
Meal 6,"veggies,large salad,Casein Protein,white fish"
mealdesc,fooddesc
Meal 1,egg
Meal 1,egg whites
Meal 1,oatmeal
Meal 1,wheat toast
Meal 1,fruit
Meal 1,berries
Meal 2,Isolyze
Meal 2,raw nuts
Meal 3,veggies
Meal 3,medium salad
Meal 3,chicken
Meal 3,turkey
...and so on.
当我删除group by和group_concat时,结果如下所示:

mealdesc,fooddesc
Meal 1,"egg,egg whites,oatmeal,wheat toast,fruit,berries"
Meal 2,"Isolyze,raw nuts"
Meal 3,"chicken,turkey,yam,baked potato,veggies,medium salad"
Meal 4,"Isolyze,raw nuts"
Meal 5,"veggies,lean red meat,salmon,Chilean Sea Bass,large salad"
Meal 6,"veggies,large salad,Casein Protein,white fish"
mealdesc,fooddesc
Meal 1,egg
Meal 1,egg whites
Meal 1,oatmeal
Meal 1,wheat toast
Meal 1,fruit
Meal 1,berries
Meal 2,Isolyze
Meal 2,raw nuts
Meal 3,veggies
Meal 3,medium salad
Meal 3,chicken
Meal 3,turkey
...and so on.
不是在sql语句中执行Group by和Group_Concat,而是必须处理explode等,以处理分隔符并将其放入php数组,是否有方法执行相同的Group by和Group_conact逻辑,并在php中组织所有这些并将其推入数组

更新: 感谢您到目前为止的回复。将我的PHP和HTML部分添加到此

我基本上希望将每顿饭作为标题输出,并将每种食物作为列表输出。我过去使用过explode,但我无法正确地形成数组,也许这就是我的问题

PHP代码:

$sql = "SELECT mealdesc, group_concat(fooddesc) as fooddesc 
    FROM plan p
    INNER JOIN mealplan mp
    ON mp.planid = p.id
    INNER JOIN meal m
    ON m.id = mp.mealid
    INNER JOIN foodmeal fm
    ON fm.mealid = m.id
    INNER JOIN food f
    ON f.id = fm.foodid
    where userid = 2
    GROUP by mealdesc
    order by mealdesc";

$result = mysqli_query($link, $sql);
if (!$result)
{
echo 'Error';
exit();
}


// Fetch food data
while($row = mysqli_fetch_assoc($result)){
$meals[] = array('mealdesc' => $row['mealdesc'], 'fooddesc' => explode(",", $row['fooddesc']));
}


echo '<pre>';
echo print_r($meals, true);
echo '</pre>';
$sql=“选择mealdesc、group_concat(fooddesc)作为fooddesc
来自p计划
内连接mealplan mp
在mp.planid=p.id上
内联餐
关于m.id=mp.mealid
内连接食品密封件
在fm.mealid=m.id上
内接食物f
在f.id=fm.foodid上
其中userid=2
米尔德斯集团
“mealdesc命令”;
$result=mysqli\u查询($link,$sql);
如果(!$result)
{
回声“错误”;
退出();
}
//获取食物数据
while($row=mysqli\u fetch\u assoc($result)){
$fines[]=array('mealdesc'=>$row['mealdesc'],'fooddesc'=>explode(“,”,$row['fooddesc']);
}
回声';
回音打印(正餐);
回声';
然后在我的HTML中,我像这样循环以输出膳食和食物描述

$meals = array();
while ($row = $stmt->fetch()) {
    $meals[$row[0]][] = $row[1];
}


我假设您使用PDO来获取上面的记录集,其中包含一条准备好的语句:

array(
    "Meal 1" => array("egg","egg whites","oatmeal","wheat toast","fruit","berries"),
    "Meal 2" => array("Isolyze","raw nuts"),
    "Meal 3" => array("chicken","turkey","yam","baked potato","veggies","medium salad"),
    "Meal 4" => array("Isolyze","raw nuts"),
    "Meal 5" => array("veggies","lean red meat","salmon","Chilean Sea Bass","large salad"),
    "Meal 6" => array("veggies","large salad","Casein Protein","white fish"),
);
这将为您提供以下格式:

implode(",", $meals["Meal 1"]);
然后,您可以通过执行以下操作以所需格式选择一个:

egg,egg whites,oatmeal,wheat toast,fruit,berries
输出

<?php foreach ($meals as $meal): ?>
<h4><?php htmlout($meal['mealdesc']); ?></h4>
<ul>
  <?php foreach ($meal['fooddesc'] as $d): ?>
  <li><?php htmlout($d); ?></li>
  <?php endforeach; ?>
</ul>
<?php endforeach; ?>
编辑

查看上面的代码,您可能希望在HTML中执行以下操作:

  while($row = dbOBj->Fetch($result))
    {
    $meal[$row['meal desc'][] = $row['food desc'];
    }


如果希望保持SQL的这种方式,为什么不在PHP中执行类似的操作:


你最终会得到
$MEIN['MEIN 1']=array('egg','蛋清',…)

IMO构建数组的工作将比简单的分解要多得多()我真的应该否决这个问题,因为它鼓励使用
mysql\uuuUcode>函数;只是一种在我手机上快速打字的方法。我现在编辑。谢谢埃里克。我想我的问题更多的是爆炸。谢谢你的帮助。这已经接近我想要做的了。我刚刚把我的php添加到我的问题中。我想我的问题是如何用explode形成数组?你想用HTML做什么
  • 鸡蛋、蛋白、燕麦片、小麦吐司、水果、浆果
  • 鸡蛋
  • 蛋清燕麦片等
    第二种选择-
  • 鸡蛋
  • 蛋清燕麦片谢谢!这非常有效。我没有足够的信用来支持你,但再次感谢你。