2015-03-08 3 views
0

У меня есть 3 таблицы бронирования, заказов и инвентаря. В заказе у меня есть заказы, например (2 яблока и апельсин). (Reservation.confirmation = orders.confirmation). Я хотел бы обновить яблоко и оранжевый inventory.sold когда reservation.status изменено на «Доставлено»Как обновить таблицу из двух разных таблиц в php MySQL?

reservation 
--------------------------- 
confirmation | status 

EX-10   pending 


orders 
--------------------------- 
confirmation | product | qty 

EX-10   apple   2 
EX-10   orange  1 


inventory 
--------------------------- 
id   | nameofproduct | sold 

1    apple   -->update to 2 
2    orange   -->update to 1 

Вот мой код до сих пор.

$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')"); 

     } 

Пожалуйста, помогите за правильный запрос. Спасибо

+0

Помогло ли мое решение? – barbarity

ответ

0

Ты слышал о TRIGGERS? См.: http://www.sitepoint.com/how-to-create-mysql-triggers/

Я сделал вам то, что вы хотите, я не проверял его, вероятно, имеет ошибки, сообщите мне, если у вас есть проблемы с ним.

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

эй варварство спасибо за внимание, должен ли я поставить этот код в свой php-скрипт. (новичок) –

+0

Это мой первый раз, когда я хочу попробовать такую ​​вещь, поэтому, пожалуйста, будьте терпеливы. –

+0

№. Вы должны запустить этот код в своей базе данных. – barbarity

Смежные вопросы