Bonjour,
j'ai un peu de mal a écrire une requête d'insertion avec une sous requête et ON DUPLICATE KEY que je découvre.
j'ai 2 tables une qui gère des règles de quota (limitation des consultations) et une qui gère un compteur de consultation mensuel par règles.
Je voudrais que lorsque une consultation est faite selon une règle définie on enregistre un nouvelle ligne de compteur pour le mois de l'année en cours si ce dernier n'existe pas et updater le compteur de 1 si la ligne est déjà présent pour le mois de l'année en cours.
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 CREATE TABLE `bib_quota_regle` ( `ID_BibQuota_Regle` mediumint(6) unsigned NOT NULL AUTO_INCREMENT, `ID_BibQuota` mediumint(6) unsigned NOT NULL, `Support` varchar(45) NOT NULL , `Quota_value` smallint(3) unsigned NOT NULL COMMENT 'le nombre de autorisé', `Type_Quota` smallint(1) unsigned NOT NULL DEFAULT '2' , `Periodicite` smallint(3) unsigned NOT NULL COMMENT '30->mois', PRIMARY KEY (`ID_BibQuota_Regle`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; CREATE TABLE `user_quota_mois` ( `ID_UserQuotas_Mois` mediumint(6) unsigned NOT NULL AUTO_INCREMENT, `ID_User` smallint(6) unsigned NOT NULL, `ID_BibQuota_Regle` mediumint(6) unsigned NOT NULL, `Annee` smallint(5) unsigned NOT NULL, `Mois` tinyint(2) unsigned NOT NULL, `Quota_Cpt` smallint(6) unsigned NOT NULL, PRIMARY KEY (`ID_UserQuotas_Mois`), KEY `Annee` (`Annee`,`Mois`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Je ne connais pas l'ID_BibQuota_Regle mais peut le retrouver à partir d'un select.
ça donnerait quelque chose comme ceci :
La requête plante sur le SELECT je ne sais pas pourquoi,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 INSERT INTO user_quota_mois (ID_User, ID_BibQuota_Regle, Annee, Mois, Quota_Cpt) VALUES (1, SELECT ID_BibQuota_Regle FROM bib_quota_regle WHERE ID_BibQuota=1 AND Support="1" AND Type_Quota="1",YEAR(CURDATE()), MONTH(CURDATE()), Quota_Cpt + 1) ON DUPLICATE KEY UPDATE xxx ;
Je ne sais pas comment paramétrer ON DUPLICATE KEY UPDATE que je viens de decouvrir pour qu'il y ait l'unicité des ligne ID_BibQuota_Regle, Mois Annee. Peut être faut il aussi changer la structure de la table...
Merci par avance de votre aide
Partager