Bonjour à tous,

J'ai un soucis avec les variables "_chep_compteur_palette" et "_chep_compteur_coiffe", j'ai l'impression qu'elles ne se chargent pas avec la donnée retournée par la requête.

2 tables :
`chepbox`
`chep_stock_bac_vide`

Mon objectif est de supprimer les données de la table `chep_stock_bac_vide` lorsque je supprime ces même données de la table `chepbox` avec des conditions.

Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
CREATE TRIGGER `before_delete_chepbox` BEFORE DELETE ON `chepbox`  FOR EACH ROW BEGIN
 
DECLARE _chep_compteur_palette INT DEFAULT 0;
DECLARE _chep_compteur_coiffe INT DEFAULT 0;
 
SET _chep_compteur_palette = "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`";
SET _chep_compteur_coiffe = "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
 
 
			IF (_chep_compteur_palette = 1) AND (_chep_compteur_coiffe = 1) THEN 	
				BEGIN
					IF OLD.`chep_ref_bac` = 0 THEN
 
							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
 
					ELSE	
 
							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
 
					END IF;
				END;	
 
			ELSE			
 
				IF OLD.`chep_ref_bac` <> 0 THEN 
					BEGIN
						DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
					END;
				END IF;
 
			END IF;	
 
 
 
END

Pour information, le dernier bloc fonctionne très bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
ELSE			
 
				IF OLD.`chep_ref_bac` <> 0 THEN 
					BEGIN
						DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
					END;
				END IF;
 
			END IF;
C'est le premier bloc qui me pose des difficultés, j'ai l'impression que les variables "_chep_compteur_palette" et "_chep_compteur_coiffe" ne s’alimente pas du résultat de la requête.

J'ai remplacer ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SET _chep_compteur_palette = "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`";
SET _chep_compteur_coiffe = "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
par cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SELECT COUNT(`chep_ref_palette`) INTO _chep_compteur_palette FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`;
SELECT COUNT(`chep_ref_coiffe`) INTO _chep_compteur_coiffe FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`;
Pas mieux au niveau du résultat.

Dans PhpMyAdmin, les requêtes correspondantes aux données restante dans la table `chepbox` retournent le bon résultat soit "palette =1" et "coiffe =1" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SELECT COUNT(`chep_ref_palette`) AS palette FROM `chepbox` WHERE `chep_ref_palette`="C60" AND `chep_cofor`="A00ER";
SELECT COUNT(`chep_ref_coiffe`) AS coiffe FROM `chepbox` WHERE `chep_ref_palette`="C61" AND OLD.`chep_cofor`="A00ER";
Mais lors de la suppression des données de la table `chepbox`, les données correspondantes restent dans la table `chep_stock_bac_vide`.

Qu'est ce qui ne va pas ?

Merci d'avance pour votre aide précieuse.


PS : en injectant la valeur directement dans la varaiable, cela fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SET @_chep_compteur_palette := 1;
SET @_chep_compteur_coiffe := 1;

La question c'est pourquoi ces 2 lignes ci-dessous ne renvoi pas 1 alors qu'en ligne de cde cela fonctionne ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
"SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`"
 
"SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
SOLUTION :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SET @_chep_compteur_palette := (SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE `chep_ref_palette` = OLD.`chep_ref_palette` AND `chep_cofor` = OLD.`chep_cofor`);
SET @_chep_compteur_coiffe := (SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE `chep_ref_coiffe` = OLD.`chep_ref_coiffe` AND `chep_cofor` = OLD.`chep_cofor`);