这就是我的数据库的结构:
product_types
名称(文字字段)
description(文本字段)
菜单
姓名(文字)
价格(文字)
product_type_id(产品类型表的外键)
我希望能够做的是遍历product_type表并显示菜单表中包含该产品类型的所有项目。
我想这样做,所以我可以将项目分成几个部分,例如product_type表格将包含“食物”,“饮料”等项目。
到目前为止,这是我的代码,它所做的只是从菜单表中获取每个项目:
<?php
$result = $connection->query("SELECT * FROM menu");
// print " Query returned ". $result->num_rows . " rows ";;
while($row = $result->fetch_assoc()) {
?>
<p><? echo $row["name"]; ?></p>
<p><? echo $row["description"]; ?></p>
<p><? echo $row["price"]; ?></p>
<hr>
<?php
};
?>
有人可以帮忙吗?
答案 0 :(得分:1)
就个人而言,我的编程很多都是关于可读性的。我最大的烦恼之一就是看到编写糟糕的代码,既没有标签结构也没有一致的缩进风格。对于下面的示例,您将看到我使用了关联Multidimensional Array来按产品类型组织菜单项。我们使用JOIN Syntax构建查询,以使用product_type_id
组合两个表。在MySQL中,JOIN
,CROSS JOIN
和INNER JOIN
是语法等价物(它们可以互相替换)。在标准SQL中,它们不等效。 INNER JOIN
与ON
子句一起使用,否则使用CROSS JOIN
。菜单项已在查询中排序,如果您未在查询中对结果进行排序,我建议通过ksort()对数组进行排序,因为我们使用产品类型作为索引。最后,由于我们将HTML集成到PHP中,我强烈建议使用alternative syntax作为控制结构。作为后备,我可以检查数组是否为空,以确定我们是否有任何结果。默认文本总是比空白页面好:
<?php
/* Fetch Menu Items */
$menu_items = array();
$sql = "SELECT `product_types`.`name` AS 'product_type', `product_types`.`description`, `menu`.`name`, `menu`.`price` FROM `menu` JOIN `product_types` ON `product_types`.`id` = `menu`.`product_type_id` ORDER BY `product_types`.`name`";
$query = $connection->query($sql);
while($row = $query->fetch_assoc()) {
$menu_items[$row['product_type']][] = $row;
}
?>
<?php if(!empty($menu_items)): ?>
<?php foreach($menu_items as $product_type => $items): ?>
<h2><?php echo $product_type; ?></h2>
<?php foreach($items as $item): ?>
<p><?php echo $item['name']; ?></p>
<p><?php echo $item['description']; ?></p>
<p><?php echo $item['price']; ?></p>
<hr>
<?php endforeach; ?>
<?php endforeach; ?>
<?php else: ?>
<p>Sorry. No menu items to display at this time. Please check back soon!
<?php endif; ?>
答案 1 :(得分:0)
试试这个:
$result = $connection->query("SELECT m.name, m.price, p.id as productTypeId, p.name as productType, p.description FROM menu inner join product_types p on m.product_type_id = p.id order by p.id");
$productType = null;
while($row = $result->fetch_assoc()) {
if ( $row['productTypeId'] != $productType ){
$productType = $row['productTypeId'];
echo "<h2>$row['productType']</h2>";
}
?>
<p><? echo $row["name"]; ?></p>
<p><? echo $row["description"]; ?></p>
<p><? echo $row["price"]; ?></p>
<hr>
<?php
};