如何在展示tbl_food数据的表格中显示关联tbl_category表的分类标题
解决方案
核心修改点
你只需要把单表查询改为两表关联查询,直接在SQL层面拿到对应分类的标题即可,无需额外循环查库,具体修改如下:
- 替换原有SQL语句
原SQL只查tbl_food表,改为关联查询,同时给同名字段加别名避免冲突:
// 原代码 $sql = "SELECT * FROM tbl_food"; // 替换为以下语句 $sql = "SELECT f.*, c.title AS category_title FROM tbl_food f LEFT JOIN tbl_category c ON f.category_id = c.id";
这里用LEFT JOIN是为了避免部分菜品没有绑定分类、或者对应分类被删除时,菜品数据也查不出来的问题。
- 修改表格输出部分的分类显示逻辑
原代码输出$category_id的位置,替换为分类标题,同时兼容无分类的场景:
<!-- 原代码 <td><?php echo $category_id; ?></td> --> <!-- 替换为 --> <td><?php echo $category_title ?? '未分类'; ?></td>
- 可选修复错误提示的列数问题
你原有空数据的<tr>上的colspan="4"不符合实际列数(现有6列),可以同步修改:
<tr> <td colspan="6" class="error">暂无菜品数据</td> </tr>
修改后完整代码
<?php // 关联查询菜品及对应分类 $sql = "SELECT f.*, c.title AS category_title FROM tbl_food f LEFT JOIN tbl_category c ON f.category_id = c.id"; // 执行查询 $res = mysqli_query($conn, $sql); // 检查是否执行成功 if($res==TRUE) { // 统计行数判断是否有数据 $count = mysqli_num_rows($res); $sn=1; if($count>0) { // 循环遍历数据 while($rows=mysqli_fetch_assoc($res)) { $id=$rows['id']; $title=$rows['title']; $description=$rows['description']; $price=$rows['price']; $active=$rows['active']; $category_title = $rows['category_title']; // 输出表格行 ?> <tr> <td><?php echo $sn++; ?></td> <td><?php echo $title; ?></td> <td><?php echo $description; ?></td> <td><?php echo $price; ?> kn</td> <td><?php echo $active; ?></td> <td><?php echo $category_title ?? '未分类'; ?></td> </tr> <?php } } else{ ?> <tr> <td colspan="6" class="error">暂无菜品数据</td> </tr> <?php } } ?>
内容的提问来源于stack exchange,提问作者user17524645
相关产品推荐
相关产品推荐

