|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Bonjour,
J'aimerais faire une requête, mais je sais pas si cela est réalisable, je m'explique. J'ai une table mysql nommée "facture": - idFacture => id unique - fk_idContrat => id du contrat, lié à la table "contrat" - dateStart - dateEnd Voici un exemple de ce que peut contenir cette table (dans l'ordre des champs décrit plus haut): 1, 1, 09-05-2011, 08-05-2012 2, 1, 09-05-2012, 08-05-2013 3, 1, 09-05-2013, 08-05-2014 4, 2, 12-05-2011, 11-05-2012 5, 2, 12-05-2012, 11-05-2013 J'aimerais faire une requête qui me sort les factures dont la date de fin est déjà passé OU sera passé dans 40 jours, et cela pour chaque contrat. Donc il faut déjà que je trouve la plus grande date de fin pour chaque contrat et après tester si la date arrive à expiration? Déjà comment trouver la plus grande date? Je dois faire des sous-requêtes? Merci d'avance |
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Étudiant Inscription : avril 2011 Messages : 317 ![]() |
Bonjour,
Cela devrait t'aider : Code mysql :
En gros : tu ramène la date en jours (nombre de jours calculé depuis le "0000-00-00"). Et tu fais la différence : si ta date de fin moins ta date actuelle est inférieure à 40, alors tu retourne l'ID. De même si ta date de fin est inférieure à la date actuelle (donc la date est passée), alors tu retourne l'id. |
||
|
|
00
|
|
|
#3 | ||||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Bonjour,
Merci pour votre réponse, j'avais déjà aussi trouver une piste avec ça: Code :
Code :
|
||||
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Étudiant Inscription : avril 2011 Messages : 317 ![]() |
Je ne suis pas sur d'avoir compris. Tu veux qu'il te renvoit la date la plus grande PARMI les dates passées ou celles qui le seront dans 40jours ?
Si oui, il suffit de faire ceci : Code :
|
||
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
J'aimerais, pour chaque contrat (fk_idContrat) qu'il prenne la date la plus grande (date de la dernière facture) et qu'il regarde si cette date arrivera à bout dans 40 jours ou si elle est déjà à bout.
Pour récupérer les dates avec les 40 jours c'est ok, mais pour les plus grande je suis coincé. Faut-il pas d'abord qu'il trouve la plus grande date pour chaque contrat via une sous-requête? Merci |
|
|
00
|
|
|
#6 | ||||
![]() ![]() |
Quelle est la date de fin maxi pour chaque contrat ?
Code :
- les contrats dont la date de fin maxi est supérieure à aujourd'hui + 40 jours ? - les contrats dont la date de fin maxi est inférieure à aujourd'hui + 40 jours ? - 40 jours inclus ou exclus ? Il suffit d'ajouter la condition adéquate dans un HAVING. Par exemple, pour le premier cas : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Bonjour,
Désolé pour le temps de réponse, j'ai du mettre de côté ce projet...mais je le reprend en main depuis quelques jours... Enfait je dois trouver la facture la plus récente pour chaque contrat. J'ai essayé avec votre requête: Code :
Une idée de comment "inverser" cela? Merci |
||
|
|
00
|
|
|
#8 | ||
![]() ![]() |
Il faut faire une jointure de ma requête avec la table des factures pour récupérer la facture correspondant à la date trouvée et au contrat.
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Chapeau sur ce coup là, j'y serais jamais arrivé, du coup ma requête donne ça:
Code :
Par contre est-ce possible d'avoir une explication sur votre requête, je ne la comprend pas totalement avec cet INNER JOIN, c'est en gros une sous-requête qui va sélectionner les plus grandes dates? Merci pour votre aide |
||
|
|
00
|
|
|
#10 |
![]() ![]() |
INNER JOIN = jointure interne
LEFT [OUTER] JOIN = jointure externe (à gauche). Pour en apprendre plus sur les jointures, voir le site de SQLPro.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com