这个数据库设计是什么,它在产品名称和三行价格中显示三行id,当我想要在一行中显示名称,品种和价格然后下一行时,每行显示三行行显示与第一行不同的另一组不同的字段值。我如何通过下面的数据库设计实现这一目标?
CREATE TABLE products (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
name VARCHAR(255)
);
CREATE TABLE product_varieties (
product_id INT,
variety VARCHAR(100),
price DOUBLE,
description TEXT,
PRIMARY KEY (product_id, variety)
);
INSERT INTO products (id, name) VALUES (1, 'Cotél de camarone');
INSERT INTO product_varieties (product_id, variety, price) VALUES (1, 'Small Tray', 2.9);
INSERT INTO product_varieties (product_id, variety, price) VALUES (1, 'Medium Tray', 6.9);
INSERT INTO product_varieties (product_id, variety, price) VALUES (1, 'Large Tray', 8.9);
Go here to see an example of what I am talking。 我希望价格2.9显示在第一行的小托盘中,然后6.9显示在第一行的中间托盘中,并且8.9显示在第一行的大托盘上。现在是行的显示价格......
帮助。
答案 0 :(得分:1)
尝试将您的数据转换为类似树的结构(数组数组),这样可以更简单地以“分组”形式输出
像这样(伪代码) $tree = array();
$sql = "select * from products
left join product_varieties on product_varieties.product_id = products.id";
$sth = query($sql);
while($row = fetch($sth)) {
$id = $row['id'];
$tree[$id]['name'] = $row['name'];
if($row['variety'])
$tree[$id]['varieties'][] = $row;
}
这会构建一个类似
的数组 1 => array
name => 'Cotél de camarone',
varieties => array
array(1, 'Small Tray', 2.9)
array(1, 'Medium Tray', 6.9)
etc
2 => array
name => 'Something else',
varieties => array
array(1, 'Small Tray', 2.9)
array(1, 'Medium Tray', 6.9)
etc
遍历此数组并生成所需的html结构
foreach($tree as $product)
<div>
echo $product['name']
foreach($product['varieties'] as $variety)
etc etc
</div>
希望我有意义