MySQL - 每个 ID 的 INSERT 或 JOIN 表行

Posted

技术标签:

【中文标题】MySQL - 每个 ID 的 INSERT 或 JOIN 表行【英文标题】:MySQL - INSERT or JOIN Table rows for every ID 【发布时间】:2014-10-01 18:17:38 【问题描述】:

我有一张订购物品的桌子。我想要发生的是,对于每个订购的商品,在它们正下方插入一个额外的行。

注意:每个销售订单可以有 1 个或多个已订购商品。

这是订购商品的表格:

这是我想要达到的表格结果:

请告诉我。实现此目的的正确 mysql 查询是什么。感谢您的帮助

【问题讨论】:

可能使用before trigger 嗨拉胡尔,感谢您的快速回复。对于这种情况,您是否有一个基本的查询? 我认为最好的办法是,从您的应用程序端而不是在 DB 端进行管理,在 order_id = 16 时的所需屏幕中,您只想插入一行进行装运。你怎么知道下一个插入 order_id 与前一个相同?因此,请尝试从应用代码管理它,然后相应地触发插入。 您好 Rahul,该数据库设计基于 wordpress 的 woocommerce 插件。某个销售订单 id = 16 可以有多个项目。这就是 woocommerce 构建数据库的方式。谢谢 【参考方案1】:

您必须使用触发器或编写包含插入表中的 2 行的 SQL 事务。

SET AUTOCOMMIT=0 
//INSERT QUERY FOR ITEM 
mysql_query("INSERT INTO table_name (order_item_name, order_item_type, order_id) VALUES ('".$name."', '".$type."', ".$order_id.")");
//INSERT QUERY FOR FREE SHIPPING 
mysql_query("INSERT INTO table_name (order_item_name, order_item_type, order_id) VALUES ('Free Shipping', 'shipping', ".$order_id.")");
SET AUTOCOMMIT=1

【讨论】:

嗨,保罗,谢谢你的想法。你觉得第二个截图有可能实现吗? 是的,当然。 SET AUTOCOMMIT=0 //INSERT QUERY FOR ITEM //INSERT QUERY FOR FREE SHIPPING SET AUTOCOMMIT=1 我明白了。我会试试你说的。我真的没有想到一个基本的方法来做到这一点。嗯..你有一个代码sn-p我怎么能基本上做到这一点先生? 我假设 order_item_id 为自动增量,order_id 为整数 SET AUTOCOMMIT=0 mysql_query("INSERT INTO table_name (order_item_name, order_item_type, order_id) VALUES ('".$name."', '".$type."', ".$order_id.")"); mysql_query("INSERT INTO table_name (order_item_name, order_item_type, order_id) VALUES ('Free Shipping', 'shipping', ".$order_id.")"); SET AUTOCOMMIT=1

以上是关于MySQL - 每个 ID 的 INSERT 或 JOIN 表行的主要内容,如果未能解决你的问题,请参考以下文章

转 mysql中的LAST_INSERT_ID()分析

MYSQL LAST_INSERT_ID 未按预期工作。我该如何解决?

MySQL 插入数据后返回自增id的方法

MySQL中的insert into 与replace into用法和区别

php mysql_insert_id()

mysql 执行insert返回自增长id