Mon problème est assez simple. J'ai une table sets
qui stocke les ensembles de produits (plus de produits ressemblant à un à l'extérieur - ordinateur, souris et clavier par exemple) il est connecté M: N en utilisant sets_products
table vers products
table. Chaque produit peut avoir des paramètres (connecté à nouveau M: N).
J'ai une procédure qui génère tous les paramètres sous forme de chaîne (pour le cache de recherche - comme "hdd: 120GB, LCD: 1440: 900, .."), mais maintenant je dois parcourir les produits de l'ensemble et appeler la procédure pour chacun des leur. JE NE PEUX PAS LE FAIRE EN PHP, car cela est utilisé dans le déclencheur.
Je voudrais utiliser quelque chose comme ça (pseudo SQL)
FOREACH(SELECT products_id FROM sets_products WHERE set_id = 1)
generate_parameter_list(product_id,@result)
@param = CONCAT(@param,",",@result);
END FOREACH;
Cela peut-il être fait dans MySQL ou non?
Voici le référence mysql pour les curseurs . Je suppose donc que c'est quelque chose comme ceci:
DECLARE done INT DEFAULT 0;
DECLARE products_id INT;
DECLARE result varchar(4000);
DECLARE cur1 CURSOR FOR SELECT products_id FROM sets_products WHERE set_id = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO products_id;
IF NOT done THEN
CALL generate_parameter_list(@product_id, @result);
SET param = param + "," + result; -- not sure on this syntax
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
-- now trim off the trailing , if desired
Cela peut être fait avec MySQL, bien que ce soit très peu intuitif:
CREATE PROCEDURE p25 (OUT return_val INT)
BEGIN
DECLARE a,b INT;
DECLARE cur_1 CURSOR FOR SELECT s1 FROM t;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET b = 1;
OPEN cur_1;
REPEAT
FETCH cur_1 INTO a;
UNTIL b = 1
END REPEAT;
CLOSE cur_1;
SET return_val = a;
END;//
Consultez ce guide: mysql-storedprocedures.pdf