私は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"
group by と group_concat を削除すると、結果は次のようになります。
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を実行し、区切り文字を処理してphp配列に入れるために爆発などを処理する必要がある代わりに、これと同じgroup byおよびgroup_concactロジックを実行し、これらすべてを整理する方法はありますか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>';
次に、私のHTMLで、このようにループして、食事と食べ物の説明を出力します
<?php foreach ($meals as $meal): ?>
<h4><?php htmlout($meal['mealdesc']); ?></h4>
<ul>
<li><?php htmlout($meal['fooddesc']); ?></li>
</ul>
<?php endforeach; ?>