【发布时间】:2013-12-27 21:40:35
【问题描述】:
我正在制作餐厅菜单,我想轻松地显示同一产品不同尺寸的不同价格,例如比萨饼。
由于数据库很大,我已经简化了信息,所以如果可能会马虎,请见谅。
Mysql 表
餐桌:食物
id | type | size | price | category
------------------------------------------------------
1 | all dressed | x-small | 7,65 | pizzas
2 | all dressed | small | 9,65 | pizzas
3 | all dressed | medium | 11,65 | pizzas
4 | all dressed | large | 18,65 | pizzas
5 | pepperoni and cheese | x-small | 6,65 | pizzas
6 | pepperoni and cheese | small | 8,65 | pizzas
7 | pepperoni and cheese | medium | 10,65 | pizzas
8 | pepperoni and cheese | large | 15,65 | pizzas
id int(11)
name varchar(255)
size varchar(60)
price varchar(50)
表格:类别
id | name
---|-----------
1 | pizzas
2 | subs
3 | wings
id int(11)
name varchar(255)
想要的布局结果
Pizzas
|------------------------------------------------------------------|
| Flavor x-small small medium large |
|------------------------------------------------------------------|
| all dressed 7,65 9,65 11,65 18,65 |
|------------------------------------------------------------------|
| pepperoni and cheese 6,65 8,65 10,65 16,65 |
|------------------------------------------------------------------|
尝试过的代码
第一个循环主要是为了确保信息得到解析。
----| queries.php |------------
public function my_products()
{
global $db;
$query = "SELECT * FROM foods ORDER BY name, price ASC";
return $db->select($query);
}
public function my_categories()
{
global $db;
$query = "SELECT * FROM categories ORDER BY name ASC";
return $db->select($query);
}
----| page.php |---------------
<?php $products = $query->my_products(); ?>
<?php $categories = $query->my_categories(); ?>
<table>
<?php
foreach($categories as $category)
{
echo "<h3>".$category->name."<h3>";
echo "<table>";
foreach ( $products as $product )
{
if($category->id == $product->category)
{
echo "<tr>";
echo "<td>".$product->name."</td>";
echo "<td>".$product->size."</td>";
echo "<td>".$product->price."</td>";
echo "</tr>";
}
}
echo "</table>";
}
?>
</table>
...返回...
pizzas
| ------------|---------|-------|
| all dressed | x-small | 7,65 |
| all dressed | small | 9,65 |
| ... | | |
|-------------|---------|-------|
subs
wings
现在我已经确认信息已返回,我正试图让数据库以特定顺序返回比萨饼的大小,但我不想硬编码这些值,因为尺寸因一种产品而异(例如,比萨饼是 x-small, small, medium, large,而 subs 是 6" and 12")。
我怎样才能阅读它们应该是的尺寸顺序?除了将我的字段设为ENUM 类型并遍历我的所有条目之外,还有其他方法可以遍历$product->size 并正确填写表格吗?
【问题讨论】:
-
您要么必须将所有大小硬编码到查询中,要么编写动态 SQL。链接的问题应该有助于理解。
-
您必须在 size 列上有一个 order 属性来指定返回数据的顺序。系统根本不知道什么是对的,你必须给它提供正确的方法。这样做的骇人听闻的方法是将不可见的 ascii 字符从低到高嵌入到大小列中,以便引擎以所需的方式对它们进行排序。更正确的方法是使用与 size 字段相关的 order 字段来指定给定产品可用尺寸的尺寸顺序。有了它,您就可以使用数据透视表进行数据透视。
-
考虑在应用层/表示层处理数据显示问题(例如作用于有序数组的简单 PHP 循环)
-
@xQbert 您能否将您的评论复制到答案中?这是最简单也是最有效的方法。最直接的选择是为每类食物设置一个允许大小的索引。
-
@PubliDesign 根据要求。我必须承认,虽然在阅读了我的评论后,我知道我想说什么,但我印象深刻的是你明白我想说什么:D