Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个MySQL查询(无PHP)_Mysql - Fatal编程技术网

多个MySQL查询(无PHP)

多个MySQL查询(无PHP),mysql,Mysql,我想知道是否可以执行SQL查询,然后用生成的ID更新另一个表,并继续遍历所有行 我有一个SQL查询可以运行,但我需要做的是在将每一行添加到卡片之后,用最后生成的id更新merged.cars\u id,以便链接它们。通常我会用PHP来做这件事,但如果可能的话,我只想用MySQL来做 主查询 INSERT INTO cards (first_contact_date, card_type, property_id, user_id) SELECT first_contact_date, 'P',

我想知道是否可以执行SQL查询,然后用生成的ID更新另一个表,并继续遍历所有行

我有一个SQL查询可以运行,但我需要做的是在将每一行添加到卡片之后,用最后生成的id更新merged.cars\u id,以便链接它们。通常我会用PHP来做这件事,但如果可能的话,我只想用MySQL来做

主查询

INSERT INTO cards (first_contact_date, card_type, property_id, user_id)
SELECT first_contact_date, 'P', property_id, user_id FROM merged
然后我需要匹配行(大致)


这样做可能吗?我该怎么做?

我建议使用MySQL触发器来实现这一点


触发器是在对表的任何记录执行插入、删除或更新之后或之前执行的函数

在您的情况下,您需要在卡上执行后插入操作,该操作仅更新合并的表。请确保在插入后使用它,否则您将无法访问新行的ID

代码如下所示,假设cards表中的id字段名为“id”


我可以推荐存储过程吗

--编辑--


啊,是的,是的。对于这种特殊情况,吉米有答案。为了链接,我将离开这篇文章。

我将设置一个触发器来执行此操作。对于mysql,请阅读。这就是触发器设计用来处理的问题。

谢谢,我只是想练习如何编写这篇文章。我现在有这个,但是我应该把原始的insert SQL行放在哪里:为每一行创建触发器
after\u insert\u cards
after insert ON
cards
开始插入合并的(card\u id)值(新的.card\u id);ENDA trigger是一个函数,当您在该表中插入(在本例中)新行时,它总是会被触发,触发器是该表模式的一部分,因此一旦创建它,您就不必再担心它,只要继续插入行,MySQL每次都会调用trigger函数。好的,谢谢,我现在已经知道了如何在我的SQL程序(HeidiSQL)中设置触发器,但是当我运行我的原始insert时,我得到一个错误:无法更新触发器中的“merged”表,因为它被包含此存储触发器的语句使用。。?感谢这个问题,因为错误表明,在您的语句中,您对合并表有一个select,所以您不能将该表用于触发器。您有一些解决方法,如果您使用的是纯MySQL,那么可以使用一个变量来存储合并查询的内容,然后使用该变量对cards表进行插入。如果您使用的是像PHP这样的代码,只需将insert和select分离到两个不同的查询中即可。
 UPDATE merged SET merged.card_id = LAST_INSERT_ID (FROM ABOVE) into the matching record..
delimiter |

CREATE TRIGGER updating_merged AFTER INSERT ON cards
  FOR EACH ROW BEGIN
    UPDATE merged SET card_id = NEW.id;
  END;
|
delimiter ;