我有一个购买表,用于存储与购买相关的所有商品。我正在重新设计表格,以便更好地构建我的表格设计,我相信我需要拿一张我的购买表并将其转换为购买,交易和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函数来遍历所有记录并创建条目,但是有很多数据因此看起来效率很低。
答案 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`