【问题标题】:Separate data into two different database tables using MySQL and PHP使用 MySQL 和 PHP 将数据分离到两个不同的数据库表中
【发布时间】:2012-09-15 04:38:53
【问题描述】:

我有一个产品提要,其中多次列出服装商品,每种颜色和尺寸的商品都列出一次。

ProductID      Product Name               Colour      Size      Price

1              Men's Board Shorts         Blue        S         4.99
1              Men's Board Shorts         Blue        M         4.99
1              Men's Board Shorts         Blue        L         5.99
1              Men's Board Shorts         Red         S         4.99
1              Men's Board Shorts         Red         M         4.99
1              Men's Board Shorts         Red         L         5.99

我有两张表:一张用于名称和 ID,另一张用于每种产品的 ID、颜色、尺寸和价格。

在第一个表中,我只希望每个产品的产品名称出现一次,而不考虑不同尺寸和颜色的数量。在第二个表中,我希望产品的 ID 代码、尺寸和价格出现在每种可用的不同颜色中。

所以我最终会得到以下数据:

Product Table
1     Men's Board Shorts

Options Table
1     Blue     S         4.99
1     Blue     M         4.99
1     Blue     L         5.99
1     Red      S         4.99
1     Red      M         4.99
1     Red      M         5.99

将尺寸分成单独的记录而不是在一个字段中具有尺寸 S、M、L 的原因是,有时大件商品的价格与中小型商品的价格不同。

有什么想法可以让我开始/指出正确的方向吗?

谢谢...

【问题讨论】:

  • 是的,我已经有了表格并且数据来自 CSV 提要。它目前使用 PHP 放在一个名为 ProductTemp 的表中。

标签: mysql database


【解决方案1】:

创建 2 个表:

 CREATE TABLE product (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR() NOT NULL
  );
 CREATE TABLE options (
  product_id INT NOT NULL PRIMARY KEY,
  color VARCHAR(30),
  size VARCHAR(10),
  price DECIMAL(10,2)  
 );

在表中获取和插入记录:

 $result1 = mysql_fetch_assoc(mysql_query('SELECT * from ProductTemp GROUP BY ProductID', $conn));

 $result2 = mysql_fetch_assoc(mysql_query('SELECT * from ProductTemp', $conn));

 foreach( $result1 as $v ) {
  $retval1 = mysql_query("INSERT INTO product VALUES('$v['ProductID']','$v['Product Name']')", $conn);
  if(!$retval1) {
  echo 'Could not enter data into table product: ' . mysql_error(); 
  exit;
 }
 }

  foreach( $result2 as $v ) { 
 $retval2 = mysql_query("INSERT INTO options VALUES('$v['ProductID']','$v['Color']','$v['Size']' , $v['Price'])", $conn); 

if(!$retval2 ) {
  echo 'Could not enter data into table options: ' . mysql_error(); 
  exit;
 }
 } 

【讨论】:

  • 没有。我不想从两个表中提取数据,我想将传入的数据分开并放入两个单独的表中。
  • @PhilJames 数据从何而来?什么应用语言?您是从数据输入表单中插入新产品吗?
  • 数据来自 csv 提要。我已经用 php 把它放到了 mysql 数据库中。
  • 现在传入的数据存储在哪个表?
  • 当前存储在名为 ProductTemp 的表中
【解决方案2】:

第一个表:

CREATE TABLE IF NOT EXISTS `products` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
) AUTO_INCREMENT=1 ;

INSERT INTO `products` (`name`) SELECT `p_name` FROM `source_table`;

第二桌:

CREATE TABLE IF NOT EXISTS `options` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `colour` varchar(12) NOT NULL,
    `size` char(1) NOT NULL,
    `price` float unsigned NOT NULL,
    PRIMARY KEY (`id`)
)  AUTO_INCREMENT=1 ;

INSERT INTO `options` (`colour`, `size`, `price`) SELECT `p_colour`, `p_size`, `p_price` FROM `source_table`;

我只是希望我正确理解了您的问题。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2019-02-09
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多