2014-06-05 1 views
-1

PHP로 MySQL 프로 시저로 변환해야하는 스크립트가 있습니다. 이 스크립트는 MySQL 트리거에 의해 실행되어야하기 때문에 PHP 스크립트를 실행할 수 없습니다. 이 문제를 모든 MySQL에서 어떻게 해결해야할지 모르겠으므로 PHP로 작성했습니다.PHP 스크립트를 MySQL 프로 시저로 변환

아래의 PHP 스크립트는 MySQL 프로 시저로 변경해야합니다. 25http://www.someurl.com/ 트리거 (new.order_id/new.store_url)에서 작성 변수 :

$query = "SELECT 
      oc_order_product.quantity, 
      oc_order_option.option_value_id, 
      product.id 
      FROM oc_order_product 
      JOIN oc_order_option 
       ON oc_order_option.order_id = oc_order_product.order_id 
      JOIN product 
       ON product.oc_product_id = oc_order_product.model 
      WHERE oc_order_product.order_id = '25' AND oc_order_product.store_url = 'http://www.someurl.com/'"; 

$result = $mysqli->query($query); 
while($row = $result->fetch_object()){ 
    $query = "UPDATE product_option_value SET quantity = quantity - {$row->quantity} WHERE product_id='{$row->id}' AND option_value_id='{$row->option_value_id}'"; 
    $mysqli->query($query); 
} 
+0

http://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement -with-join-in-sql – Dimitri

+0

@Dimitri 그 질문이 나를 어떻게 도울 지 모르겠다. – Timo002

답변

1

두면, 나는 약간의 흔적과 오류를하고있는 도중 인터넷을 읽은 후 내 자신의 해답을 발견했다.

나는 업데이트 트리거에서 실행할 저장 프로 시저를 만들었습니다.

트리거

CREATE TRIGGER `order_gereed` AFTER UPDATE ON `oc_order` 
FOR EACH ROW IF new.order_status_id = "15" 
THEN 
CALL VooraadUpdate(new.order_id, new.store_url); 
UPDATE push_voorraad SET actie = '1'; 
END IF 

절차

CREATE DEFINER=`root`@`localhost` PROCEDURE `VooraadUpdate`(IN `orderID` INT(11), IN `storeURL` VARCHAR(255)) 
    NO SQL 
BEGIN 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE a, b, c INT; 
    DECLARE cur1 CURSOR FOR SELECT 
           oc_order_product.quantity, 
           oc_order_option.option_value_id, 
           product.id 
          FROM oc_order_product 
           JOIN oc_order_option 
           ON oc_order_option.order_id = oc_order_product.order_id 
           JOIN product 
           ON product.oc_product_id = oc_order_product.model 
          WHERE oc_order_product.order_id = orderID AND oc_order_product.store_url = storeURL; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    OPEN cur1; 
    read_loop: LOOP 
     FETCH cur1 INTO a, b, c; 
     IF done THEN 
      LEAVE read_loop; 
     END IF; 

     UPDATE product_option_value SET quantity = quantity - a WHERE product_id=c AND option_value_id=b; 

    END LOOP; 

    CLOSE cur1; 
END 
관련 문제