Bonjour,
Voici mon soucis :
Je crée un trigger sur ma table products, afin que lorsque mon champ ProductAvailQty tombe à 0, il flag à 0 mon champ ModelFlag de ma table models.
La création se passe bien, mais lorsque je tente de modifier mon champ ProductAvailQty, il me génère une erreur de champ inconnu dans fieldlist... alors que je le fais via l'interface graphique...
Comment peut-il être inconnu alors qu'il me le propose, bref j'ai tenté à la main aussi, sans succès
Voici mes codes
D'abord la table models
Ensuite la table products avec le trigger au bout
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 -- Structure de la table `models` -- CREATE TABLE IF NOT EXISTS `models` ( `ModelID` int(10) unsigned NOT NULL AUTO_INCREMENT, `ModelName` varchar(100) NOT NULL, `ModelDescription` varchar(500) DEFAULT NULL, `ModelPath` varchar(250) DEFAULT NULL, `ModelFlag` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`ModelID`), UNIQUE KEY `ModelID_UNIQUE` (`ModelID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; -- -- Contenu de la table `models` -- INSERT INTO `models` (`ModelID`, `ModelName`, `ModelDescription`, `ModelPath`, `ModelFlag`) VALUES (1, '5.jpg', 'Première image, avec refresh. Voici une petite description de cette image, qui ne doit contenir que 255 caracteres maximum.', '../images/products/', 1), (2, '123.jpg', 'Seconde teste image de test', '../images/products/', 1), (3, 'Koala.jpg', 'Toto le petit koala', '../images/products/', 1), (4, 'Phare.jpg', 'Description phare', '../images/products/', 1), (8, 'Méduses.jpg', 'Description méduses', '../images/products/', 1);
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
40
41
42
43
44
45
46
47
48
49
50 CREATE TABLE IF NOT EXISTS `products` ( `ProductID` int(10) unsigned NOT NULL AUTO_INCREMENT, `ProductHeight` decimal(6,2) DEFAULT NULL, `ProductLength` decimal(6,2) DEFAULT NULL, `ProductAmount` decimal(15,2) DEFAULT NULL, `ProductAvailQty` int(10) DEFAULT NULL, `supports_SupportID` int(10) unsigned NOT NULL DEFAULT '0', `Models_ModelID` int(10) unsigned NOT NULL, PRIMARY KEY (`ProductID`,`supports_SupportID`,`Models_ModelID`), UNIQUE KEY `ProductID_UNIQUE` (`ProductID`), KEY `fk_Products_supports1_idx` (`supports_SupportID`), KEY `fk_Products_Models1_idx` (`Models_ModelID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Contenu de la table `products` -- INSERT INTO `products` (`ProductID`, `ProductHeight`, `ProductLength`, `ProductAmount`, `ProductAvailQty`, `supports_SupportID`, `Models_ModelID`) VALUES (1, '100.00', '80.00', '150.00', 15, 1, 1), (2, '99.00', '99.00', '100.00', 10, 2, 1), (3, '150.00', '151.00', '152.00', 10, 1, 2), (4, NULL, NULL, NULL, NULL, 2, 8); -- -- Déclencheurs `products` -- DROP TRIGGER IF EXISTS `soldOut`; DELIMITER // CREATE TRIGGER `soldOut` AFTER UPDATE ON `products` FOR EACH ROW BEGIN IF ( ProductAvailQty = 0 ) THEN UPDATE models SET ModelFlag = 0 WHERE ModelID = (select Models_ModelID from products where ProductAvailQty = 0 AND ModelFlag != 0); END IF; END // DELIMITER ; -- -- Contraintes pour les tables exportées -- -- -- Contraintes pour la table `products` -- ALTER TABLE `products` ADD CONSTRAINT `fk_Products_Models1` FOREIGN KEY (`Models_ModelID`) REFERENCES `models` (`ModelID`) ON DELETE NO ACTION ON UPDATE NO ACTION, ADD CONSTRAINT `fk_Products_supports1` FOREIGN KEY (`supports_SupportID`) REFERENCES `supports` (`SupportID`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Une idée salvatrice ???
Merci d'avance pour votre temps.
Partager