如何在php MySQL中更新基于两个不同表的表?
我有三张桌子:预订、订单和库存。例如,在预订中,我有订单(两个苹果和一个桔子)。(reservation.confirmation=orders.confirmation)。我想更新apple and orange inventory.Seld当reservation.status更改为“Delivered”时 这是到目前为止我的代码如何在php MySQL中更新基于两个不同表的表?,php,mysql,sql,Php,Mysql,Sql,我有三张桌子:预订、订单和库存。例如,在预订中,我有订单(两个苹果和一个桔子)。(reservation.confirmation=orders.confirmation)。我想更新apple and orange inventory.Seld当reservation.status更改为“Delivered”时 这是到目前为止我的代码 $confirmation = $_POST['confirmation']; $status=$_POST['status']; mysql_q
$confirmation = $_POST['confirmation'];
$status=$_POST['status'];
mysql_query("UPDATE reservation SET status='$status' WHERE reservation_id='$roomid'");
if ($status=='Delivered')
{
mysql_query("UPDATE inventory SET sold = (SELECT qty FROM orders where confirmation='$confirmation') where nameofproduct=(SELECT prduct FROM orders where confirmation='$confirmatioin')");
}
请为正确的查询提供帮助。谢谢您听说过触发器吗?见: 我已经为你做了你想要的,我没有检查它,所以可能有错误,如果你有问题,请告诉我
DELIMITER $$
CREATE TRIGGER inventory
AFTER UPDATE ON reservation FOR EACH ROW
BEGIN
DECLARE finished INT DEFAULT 0;
DECLARE product VARCHAR(200); -- SHOULD BE THE SAME TYPE AND LENGTH AS order.product
DECLARE qty INT; -- SHOULD BE THE SAME TYPE AND LENGTH AS order.qty
DECLARE orders_cursor CURSOR FOR SELECT o.product, o.qty FROM orders o WHERE o.confirmation = NEW.confirmation;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
IF (NEW.status = 'delivered') THEN
open orders_cursor;
get_orders: LOOP
FETCH orders_cursor INTO product, qty;
IF finished = 1 THEN
LEAVE get_orders;
END IF;
-- UPDATE INVENTORY
UPDATE inventory i SET i.sold = qty WHERE i.nameofproduct = product;
END LOOP get_orders;
close orders_cursor;
END IF;
END
$$
我的解决方案对你有帮助吗?嘿,barbarity谢谢你的努力,我应该把这段代码放到我的php脚本中吗。(新手)这是我第一次尝试这样的事情,请耐心等待。我已经这样做了….,我收到了这个错误,在更新每行预订后创建触发器库存开始声明完成整数默认值0;MySQL说:文档#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第4行“”附近要使用的正确语法抱歉,缺少分隔符。现在试试。
DELIMITER $$
CREATE TRIGGER inventory
AFTER UPDATE ON reservation FOR EACH ROW
BEGIN
DECLARE finished INT DEFAULT 0;
DECLARE product VARCHAR(200); -- SHOULD BE THE SAME TYPE AND LENGTH AS order.product
DECLARE qty INT; -- SHOULD BE THE SAME TYPE AND LENGTH AS order.qty
DECLARE orders_cursor CURSOR FOR SELECT o.product, o.qty FROM orders o WHERE o.confirmation = NEW.confirmation;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
IF (NEW.status = 'delivered') THEN
open orders_cursor;
get_orders: LOOP
FETCH orders_cursor INTO product, qty;
IF finished = 1 THEN
LEAVE get_orders;
END IF;
-- UPDATE INVENTORY
UPDATE inventory i SET i.sold = qty WHERE i.nameofproduct = product;
END LOOP get_orders;
close orders_cursor;
END IF;
END
$$