MySql - 使用数据

时间:2015-12-17 19:53:06

标签: mysql

我有一个购买表,用于存储与购买相关的所有商品。我正在重新设计表格,以便更好地构建我的表格设计,我相信我需要拿一张我的购买表并将其转换为购买,交易和purchase_transactions(中间表)。

我购买表的缩略图是

columns related to the purchase item | columns related to the transaction

每个交易都可以附加多个购买项目,因此如果购买有多个项目,则会有大量冗余交易信息。同样,当我处理退款或类似情况时,我必须覆盖当前的交易信息,以便丢失历史记录。

我的问题是,有没有办法编写一个脚本来分解我的购买表,不仅可以创建一个事务表,还可以创建purchase_transactions中间表并保留所有信息?

我相信我可以像这样划分出交易表

CREATE TABLE transactions AS
  SELECT [ transaction_id, transaction_status_id...etc ]
  FROM purchases

但是如果可能的话,我很遗憾如何将中间表包含在这个过程中。

我的另一种方法是创建一个php chunk函数来遍历所有记录并创建条目,但是有很多数据因此看起来效率很低。

1 个答案:

答案 0 :(得分:0)

我实际上能够自己解决这个问题,因为购买表包含了交易表和purchase_transactions中间表所需的所有信息。

我只是用主键id字段创建了我的事务表,并将我需要的数据插入到:

  INSERT INTO transactions (`client_id`, `last_four`, `transaction_id`,`transaction_status_id`, 
       `total`, `payment_type_id`,`cart_id`, `created_at`)
        SELECT `client_id`, `last_four`, `transaction_id`,`transaction_status_id`, 
        sum(`total`) as `total`, `payment_type_id`,`cart_id`, `created_at`
        FROM purchases
        GROUP BY `cart_id`
        ORDER BY `id` ASC")

然后我使用下面的create table语法创建purchase_transactions表。

 CREATE TABLE purchase_transactions
        SELECT `id`, `cart_id`
        FROM purchases
        ORDER BY id ASC

最后,我在purchase_id上​​面重命名了id列。我不确定,但我认为我可以在create table中使用as语句:

  SELECT `id` as `purchase_id`