Bonjour,
Je dispose actuellement d'une base de données qui dispose de deux tables dont j'ai perdu le lien qui les reliait. Je tente donc, au travers de la requête suivante, d'associer un Abonnement à un Mouvement :
J'ai mis en gras là où la requête me pose problème. Dans la première partie (avec IF) je détermine à combien de jours/mois je vais devoir faire le calcul sur la date dans la 2ème partie (DATE_ADD).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT m.id_mouvement, a.id_abonnement, IF (pk.duree = 10000, '12 MONTH', IF (pk.duree = 100, '1 MONTH', '1 DAY') ) AS startDelay FROM mouvements m, abonnements a, composition_pack p, acces_pack pk WHERE m.id_pack = pk.id_pack AND m.id_pack = p.id_pack AND p.id_formule = a.id_formule AND DATE_ADD(a.date_expiration, INTERVAL - startDelay) = m.date_validation ORDER BY m.id_mouvement,a.id_abonnement ASC LIMIT 10
Concrètement :
- si la valeur de pk.duree est à 10000 => je dois soustraire 12 mois à a.date_expiration.
- si la valeur de pk.duree est à 100 => je dois soustraire 1 mois à a.date_expiration.
- si la valeur de pk.duree est à 1 => je dois soustraire 1 jour à a.date_expiration.
Je pensais qu'en mettant dans le IF (de la 1e partie de la requête) un bout de la requête que j'allais utiliser ('12 MONTH' / '1 MONTH' / '1 DAY') je pourrais réutiliser ceci dans ma condition. Il semblerait que non.
L'erreur obtenue par MySQL est la suivante :
Auriez vous une idée qui pourrait résoudre mon problème ?#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') = m.date_validation
ORDER BY m.id_mouvement,a.id_abonnement ASC
LIMIT 10'
Merci par avance pour votre aide.
EDIT : Ma version de MySQL est : Ver 14.12 Distrib 5.0.67, for redhat-linux-gnu (i686)
Partager