J'ai créé un déclencheur APRÈS une MISE À JOUR d'une colonne dans une base de données MySQL. Lorsque le déclencheur détecte une certaine valeur, il doit effectuer certaines actions. C'est ce que j'ai en ce moment et fonctionne très bien.
CREATE TRIGGER `order_gereed` AFTER UPDATE ON `oc_order`
FOR EACH ROW IF new.order_status_id = "15"
THEN
UPDATE Push_voorraad SET actie = '1';
END IF
Mais maintenant, je dois faire un peu plus de SQL quand new.order_status_id
correspond à 15. Je ne sais pas comment faire cela en SQL pur, mais je fais maintenant comment en php. J'espère donc qu'en publiant mon code php, quelqu'un pourra me dire comment faire cela en SQL.
$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);
}
25
dans la requête ci-dessus devrait en fait être new.order_id
.
http://www.someurl.com/
dans la requête ci-dessus devrait en fait être new.store_url
Oke, j'ai trouvé ma propre réponse après avoir lu Internet et fait quelques traces et erreurs.
J'ai créé une procédure stockée que je vais exécuter sur le déclencheur de mise à jour.
Le déclencheur
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
La procédure
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