problème d'ordre avec des dates de naissance

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème d'ordre avec des dates de naissance

Re: problème d'ordre avec des dates de naissance

par Neophyte » 13 août 2012, 05:54

Merci pour ces suggestions.
A 1ère vue, plutôt compliqué en utilisant que mysql... Je vais devoir cogiter.

Re: problème d'ordre avec des dates de naissance

par Mazarini » 10 août 2012, 09:16

Tu peux essayer de travailler avec datediff en supprimant les années dans résultat et te baser sur ca pour faire de calcul et le tri.

ou

Il est possible de définir une fonction dans mySQL, tu peux réalisé une fonction qui calcul la prochaine date d'anniversaire et travailler avec le résultat de cette fonction. Tu calcules la date avec l'année en cours et si cette date est inférieure à la date du jour, tu ajoutes 1 an.
Tu peux alors sélectionner et trier sans problème. (http://docs.oracle.com/cd/E17952_01/ref ... n-udf.html)

Re: problème d'ordre avec des dates de naissance

par Neophyte » 10 août 2012, 06:21

Merci Zahnzao.

En l'état, l'ordre reste donc sans solution. En effet, au passage du mois, il faudrait directement avoir l'ordre suivant :
29/8
30/8
31/8
1/9
2/9

Alors que la requête sql renvoie les résultats dans l'ordre croissant "naturel"...

Re: problème d'ordre avec des dates de naissance

par Zahnzao » 09 août 2012, 20:34

Simplement ceci devrait fonctionner non ?
SELECT *
FROM tbl_personne
WHERE DATE_FORMAT( `birth_p` , '%m%d' )
      BETWEEN DATE_FORMAT( NOW( ) , '%m%d' ) 
      AND DATE_FORMAT( DATE_ADD( NOW( ) , INTERVAL 7 DAY ) , '%m%d' )
Par contre pour le order by... effectivement lors du changement de mois ça coince.

Re: problème d'ordre avec des dates de naissance

par Neophyte » 09 août 2012, 19:32

OK, merci pour vos réponses.
A vrai dire, je me rends compte que la requête supporte mal le passage à un nouveau mois. En effet, l'extraction se fait une fois par semaine... et lorsque la semaine court sur 2 mois, cela ne donne pas les résultats attendus.

:roll:

Re: problème d'ordre avec des dates de naissance

par Mazarini » 09 août 2012, 16:01

ORDER BY DAY(birth_p)
ou
ORDER BY DAYOFMONTH(birth_p)

Edit : dans ta clause where utilise DATE_FORMAT(date,'%m %d) pour le between car ca ne doit pas marcher en cas de changement de mois avec le +7
genre between 31 and 7

Edit 2 : edit aussi faux pour fin décembre...

Re: problème d'ordre avec des dates de naissance

par Zahnzao » 09 août 2012, 14:58

Salut,

essaye ORDER BY SUBSTRING(birth_p,9,2)

;)

problème d'ordre avec des dates de naissance

par Neophyte » 09 août 2012, 14:51

Bonjour,

J'ai une requête qui sort les anniversaires des 7 prochains jours (uniquement le jour et le mois) :

SELECT * FROM `tbl_personne`
WHERE
MONTH(`birth_p`) BETWEEN MONTH(current_date) AND MONTH(current_date + interval 7 day)
AND DAY(`birth_p`) BETWEEN DAY(current_date) AND DAY(current_date + interval 7 day)

Je bute sur une question de tri sans doute assez simple... Je voudrais que le tri se fasse selon la date du jour, à savoir : 10, 11, 12, 13, 14 août, etc.

Le champs (birth_p) est au format : 1990-08-10. Il faut donc pouvoir trier sur le sous-champs des jours pour avoir l'ordre adéquat.

Merci d'avance.