Les dates avec MySQL [Résolu]

Signaler
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
-
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
-
Salut,

je deviens fou avec mon calendrier

J' ai une date de commencement et une date de fin

respectivement : date_start et date_end

Leur type : datetime (oui je sais on peut gagner de la place en transformant le tout en un chiffre dans un int) (format : 0000-00-00 00:00:00)

Mon problème, j' aimerais selectionner toute les sujets qui sont sur et entre ces dates :-/

Par exemple, je prend le 2006-05-15 et ça doit m'afficher tout ce qui à lieu ce jour là.

Voici une ligne dans ma table

"id","date_start", "date_end", "sujet"

1, "2006-04-15", "2006-05-28", "Mon sujet"



Et si je fais la requette suivante ça marche pas :-(

SELECT `id`,`date_start`,`date_end`,`sujet` FROM `calendrier` WHERE
`date_start`>="2006-05-10" AND `date_end`<="2006-05-10";

Je m' embrouille completement
Merci
@+

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.

11 réponses

Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Hum, c'est toi qui n'a pas compris :)

si tu veux afficher ta ligne, il te faut ca :
SELECT id, date_start, date_end, sujet
FROM calendrier
WHERE '2006-05-10' >= date_start
AND '2006-05-10' <= date_end

Car la date que tu choisit (10/05/2006) doit être située entre une date de début (et donc doit être plus grande) et une date de fin (et donc doit être moins grande).

Par exemple, pour faire afficher ta ligne, il faudrait choisir une date entre le 15 avril 2006 et le 28 Mai 2006. Comme tu as choisi le 10 Mai 2006, ta ligne devrait s'afficher maintenant :o)
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Tiens, pour bien comprendre :
date_end est forcement egale ou superieure à date_start, non ?

Alors regarde ta demande :
- 2006-05-10<=date_start
- date_end<=10/05/2006

avec l'hypotese de depart, tu obtiens :
2006-05-10<=date_start<=date_end<=10/05/2006
Ce qui fait un intervalle d'une seule journée ;o)
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Salut,
Merci de ta réponce rapide ;-)
J' ai pas vraiment eu le temp de chercher déslé :$
Mais 20 min plustard j' avais trouvé c' est plus simple et ça marche nikel
WHERE `date_start`<="2006-04-20 23:59:59" AND `date_end`>="2006-04-20";

@+ et encore merci

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Je vois pas ou est le problème :
2006-04-15 est plus petit que 2006-05-10,
ta ligne ne peut donc pasa apparaitre...
Messages postés
150
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
22 octobre 2008

Salut,

Entièrement d'accord avec Mindiell !
Dans ta requête, la date_start doit être supérieure au 10 mai 2006. La ligne que tu cherches a sa date_start au 15 avril 2006 donc forcément elle ne peut pas apparaître (car inférieure au 10 mai).

SELECT `id`,`date_start`,`date_end`,`sujet` FROM `calendrier` WHERE
`="2006-05-10" AND `date_end`<="2006-05-10";

Ciao.

==============================================================
Si cette réponse convient à ton problème, n'oublies pas de l'accepter
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Salut,
vous avez pas comprit; date_start et date_end forment une intervalle et la date 2006-05-10 est bien entre, donc ça devrait afficher l' id 1.
Mais ça bug et je vois pas comment faire.

++

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
ça marche nikel 20/20 vous êtes des dieux
!!!!
Merci mille fois !!!
Trop des masses ;-)

Reste un bug imprévu sur une autre requette :$
$date_de_recherche = '2006-04';

SELECT `date_start`,`date_end` FROM `calendrier` WHERE `date_start`>="'.$date_de_recherche.'-01" AND `date_start`Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Fais ton calcul de date en php, c'est plus simple. De plus, la réponse étant acceptée, il vaudrait mieux poster sur un autre sujet histoire d'éclaircir la recherche des autres ;o)
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Salut,
Ok je le fais de suite ;-)
Et encore merci :-D

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Salut,
j' ai encore un problème avec cette requette :'(
Les dates que j'utilise sont plus présise qu' avant :
"id","date_start", "date_end", "sujet"
1, "2006-04-20 15:00:00", "2006-04-20 18:00:00", "Mon sujet"

Or avec la requette :
SELECT `id`, `date_start`, `date_end`, `sujet`
FROM `calendrier`
WHERE '2006-04-20' >= `date_start`
AND '2006-04-20' <= `date_end`;
ça marche pas du tout :'(
Mais où est le bug ?

@+
Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Mais, tu réfléchis jamais ? ^^

WHERE '2006-04-20' >= `date_start`
AND '2006-04-20' <= `date_end`;

en imaginant que '2006-04-20' correspond à cette date à minuit, alors la date est bien inférieure à date_end, mais elle n'est pas supérieure à date_start. Comme tu utilises un 'AND', ta réponse est fausse et la ligne n'apparait pas.

Comme apparemment tu veux que ta ligne soit présente si et seulement si la date de début ET la date de fin font partie de cette journée, utilise ca :
WHERE '2006-04-20' <= `date_start` AND '2006-04-21' > `date_start`
AND '2006-04-20' <= `date_start` AND '2006-04-21' > `date_end`

Afin que date_start soit entre le 20 minuit (inclus) et le 21 minuit (exclus)
et que date_end aussi

Voilà,

PS: n'oublie pas de poster tes questions dans de nouveaux posts que tout le monde puisse en profiter !