【发布时间】:2018-09-19 08:51:31
【问题描述】:
我有 2 个表,分别名为 applications 和 filters。表结构如下:
mysql> DESCRIBE applications;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| filter_id | int(3) | NO | | NULL | |
+-----------+---------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> DESCRIBE filters;
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| label | varchar(255) | NO | | NULL | |
| link | varchar(255) | NO | | NULL | |
| anchor | varchar(100) | NO | | NULL | |
| group_id | tinyint(3) unsigned | NO | MUL | NULL | |
| comment | varchar(255) | NO | | NULL | |
+----------+----------------------+------+-----+---------+----------------+
7 rows in set (0.02 sec)
我要做的是选择applications中的所有记录,并在filters中创建相应的记录(以便filters.name与applications.name相同)。当记录插入filters 时,我想获取新插入记录的主键(filters.id) - 这是一个自动增量字段 - 并用它更新applications.filter_id。 我应该澄清一下,applications.filter_id 是我为此目的创建的一个字段,目前不包含任何数据。
我是一名 PHP 开发人员,并且编写了一个可以执行此操作的脚本,但想知道是否可以使用纯 MySQL 解决方案。在伪代码中,我的脚本的工作方式如下:
- 选择
applications中的所有记录 - 在 (1) 上执行
foreach循环 - 在
filters(filters.name==applications.name) 中插入一条记录 - 将插入的 ID (
filters.id) 存储到变量中,然后使用变量的数据更新applications.filter_id。
我不知道如何在 MySQL 中执行循环 (2) 和存储自动增量 ID (4)。
我已经阅读了有关Get the new record primary key ID from mysql insert query? 的信息,所以我知道LAST_INSERT_ID(),但不确定如何在遍历每个applications 记录的某种“循环”中引用它。
如果可能的话,请有人建议吗?
【问题讨论】:
标签: mysql