帮助进行数据库设计和查询行

时间:2010-02-09 21:10:10

标签: php

这个数据库设计是什么,它在产品名称和三行价格中显示三行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显示在第一行的大托盘上。现在是行的显示价格......

帮助。

1 个答案:

答案 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>

希望我有意义