Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/07/2011, 16h01   #1
Futur Membre du Club
 
Inscription : septembre 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 64
Points : 19
Points : 19
Par défaut Différence de dates avec échéance

Bonjour,

J'ai une table "plans_maint" qui stocke des plans de maintenance relatifs à des matériels. Le champ "date_proch_maint" de cette table stocke la date de prochaine maintenance.

Je souhaite interroger cette table pour savoir quels plans arrivent à échéance et doivent déclencher des tâches de maintenance. Evidemment c'est très simple sauf qu'intervient un nombre de jours (20 jours) avant échéance pour prévenir assez tôt les techniciens.

Ma requête est la suivante :
Code :
SELECT * FROM plans_maint WHERE (date_proch_maint-20)<now()
Actuellement, cela me retourne toutes les lignes de la table. En fait, date_proch_maint (2011-10-31) - 20 me donne une date du style 20111011 ou parfois plus fantaisiste (20111083) et donc cela fausse la comparaison avec now() qui en plus comporte l'heure.

Voilà j'espère être assez clair : comment faire la soustraction date_proch_main - 20 jours correctement pour la comparer à now() ?

Merci d'avance pour votre aide
Akazed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 16h25   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Les joies de la GMAO !

Quel est le typage de votre colonne date_proch_maint ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/07/2011, 09h47   #3
Futur Membre du Club
 
Inscription : septembre 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 64
Points : 19
Points : 19
Bonjour,

date_proch_maint est de type date au format YYYY-MM-DD.
Akazed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 10h03   #4
Futur Membre du Club
 
Inscription : septembre 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 64
Points : 19
Points : 19
En fait après de nouvelles recherches suite à ton message, puis en me plongeant dans mon code de gestion de session dont je me suis souvenu qu'il utilisait TIMEDIFF() pour voir quelles sessions effacer de la table sessions, j'ai trouvé l'instruction DATEDIFF()

Donc si je fais DATEDIFF(date_proch_maint, NOW()) j'ai le nombre de jours entre la date de la future maintenance et aujourd'hui.

Je retranche mes jours : 20 jours si je souhaite être prévenu 20 jours avant : DATEDIFF(date_proch_maint, NOW()) - 20

Si c'est supérieur à 0 on fait rien sinon on déclenche une tâche de maintenance.

Je crois que ça va marcher comme ça. Merci encore pour ton aide
Akazed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 10h11   #5
Futur Membre du Club
 
Inscription : septembre 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 64
Points : 19
Points : 19
Pour info voilà la requête finale :

Code :
1
2
3
SELECT plans_maint.FK_mat, params.ech_maint, plans_maint.date_proch_maint 
FROM plans_maint, params 
WHERE (DATEDIFF(plans_maint.date_proch_maint,NOW())-params.ech_maint)<0
params.ech_maint stocke le nombre de jour car c'est paramétrable depuis l'interface utilisateur.

J'ai donc comme résultat les plans de maintenance dont la date de prochaine maintenance arrive dans X jours (params.ech_maint) ou moins.
Akazed est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h45.


 
 
 
 
Partenaires

Hébergement Web