如何在php MySQL中更新基于两个不同表的表?

如何在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

我有三张桌子:预订、订单和库存。例如,在预订中,我有订单(两个苹果和一个桔子)。(reservation.confirmation=orders.confirmation)。我想更新apple and orange inventory.Seld当reservation.status更改为“Delivered”时

这是到目前为止我的代码

$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
$$