MySQL获取受影响行的行ID并在更新后再次更新它们

时间:2014-12-23 22:33:06

标签: mysql stored-procedures mysql-event

基本上我正在更新我的orders表并在日期早于x金额时修改状态。我想要做的是获取受影响的行并在我的events表中插入一行来记录事件,我的事件表通过order_id字段识别其订单,该字段应与{{order_id字段相同1 {}在orders表中。

所以到了一些代码。

UPDATE `orders` SET `status`='7' WHERE `date` < (UNIX_TIMESTAMP(NOW()) - 172800) AND `status` = '2';

此查询更新的行必须通过一些循环,以便为每个受影响的行将一行插入到我的events表中。一些我必须在此查询中使用order_id的方法:

INSERT INTO `orders_events` (`order_id`, `event_id`, `user`, `date`) VALUES (12345678, 6, "Admin", UNIX_TIMESTAMP(now()))

我想要先将select个订单inserttemporary table分别编入modifyselect,然后insert再次获取该行来自event中行的ID和temporary table insert数据。但是我在这里遇到了一个问题,因为我不知道如何在mysql中为每个循环提供行和{{1}}到事件中。

在存储过程/ mysql预定事件中执行此操作的正确和最有效的方法是什么?

此外,我想补充一点,因为每隔分钟由多个用户更新,因此锁定表格是不行的。

2 个答案:

答案 0 :(得分:0)

您可以使用它来获取您要查找的信息

$affected = mysql_info();
//this will let you see what is returned
echo '<pre>'; print_r($affected); die();

http://php.net/manual/en/function.mysql-info.php

但是,您会注意到它已被弃用。如果您还没有使用PDO或Mysqli,那么您应该考虑这样做。以下是上述http://php.net/manual/en/mysqli.info.php

的Mysqli等价物

答案 1 :(得分:0)

解决了!

INSERT INTO `orders_events` (`order_id`, `event_id`, `user`, `date`) 
SELECT id, 6, 'Admin', UNIX_TIMESTAMP(NOW()) FROM `orders` WHERE `date` < (UNIX_TIMESTAMP(NOW()) - 172800) AND `status` = '2';

UPDATE `orders` SET `status`='7' WHERE `date` < (UNIX_TIMESTAMP(NOW()) - 172800) AND `status` = '2';