0

orders基本上,如果日期早于 x 金额,我将更新我的表格并修改状态。我想要做的是获取受影响的行并在我的表中插入一行events来记录事件,我的事件表通过一个order_id应该与表中相同的字段来order_id识别它的顺序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将订单和insert它们放入 atemporary tablemodify它们那里,然后再次它们以获取select行 ID 和. 但是我在这里遇到了一个问题,因为我不知道如何使用 mysql 中的每个循环来获取行和事件。inserteventtemporary tableinsert

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

另外我想补充一点,锁定表格是不行的,因为它每分钟都会被多个用户更新。

4

2 回答 2

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等价物

于 2014-12-24T00:57:38.427 回答
-1

解决了!

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';
于 2014-12-24T19:10:39.773 回答