|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
Bonjour,
je me prends la tête pour trouver LA requête qui fonctionne avec tous mes cas. Les utilisateurs ont une liste sous la forme Février 2011/Mars 2011/Avril 2011... afin d'afficher les manifestations qui ont lieu pendant ce mois, et qui ne sont pas encore passées. Mes manifestations sont enregistrées avec une date de début et une date de fin (qui peuvent être identiques si la manifestation ne dure qu'une journée). Par exemple, je dois afficher : - A qui a lieu le 15/02/11 (heureusement la majorité des cas ne dure qu'une journée) - B qui a lieu entre le 01/01/11 et le 17/02/11 - C qui a lieu entre le 02/02/11 et le 23/02/11 - D qui a lieu entre le 18/02/11 et le 25/02/11 - E qui a lieu entre le 01/01/11 et le 15/03/11 ... j'ai essayé plusieurs choses, sans succès total une idée ? merci d'avance ! |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Jérémy Étudiant Inscription : octobre 2009 Messages : 236 ![]() |
EDIT : J'étais partis sur l'affichage, désolé.
La réponse fournie par stealth35 est la plus propre à mon goût. |
|
|
00
|
|
|
#3 |
|
Membre expérimenté
![]() Inscription : mai 2006 Messages : 501 ![]() |
Soit $mois_debut le premier jour du mois choisis et $mois_fin le dernier jour du même mois.
Soit une table event qui contient les champs id, date_debut, date_fin. Alors ta requête sera du type : Code :
$sql = "SELECT id FROM event WHERE date_debut <= '$mois_fin' AND date_fin >= '$mois_debut'"; |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
utilises YEAR et MONTH
http://dev.mysql.com/doc/refman/5.0/...functions.html
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 | |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
Citation:
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-01" AND publish_down >= "2011-02-28" J'ai bien essayé avec year et month, mais je patauge dans mes essais fantaisistes... |
|
|
|
00
|
|
|
#6 | |
|
Membre expérimenté
![]() Inscription : mai 2006 Messages : 501 ![]() |
Citation:
Si je comprends ton code, essais plutôt Code :
SELECT * FROM agendav3 WHERE publish_up >= "2011-02-01" AND publish_down <= "2011-02-28" |
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
Bonjour Fabllot,
de cette manière, je n'ai que les manifestations dont les dates de début et de fin sont comprises dans le mois. |
|
|
00
|
|
|
#8 | |
|
Membre expérimenté
![]() Inscription : mai 2006 Messages : 501 ![]() |
Citation:
Code :
publish_up >= "2011-02-01" AND publish_down <= "2011-02-28" Je surpris car j'utilise cette recette sur mes sites et ça marche très bien ! |
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
publish_up : date de début de la manifestation
publish_down : date de fin j'ai bien mis les bons sens de comparaison (j'ai même essayé les 2 sens en fait Quelques exemples concrets (titre/publish_up/publish_down) qui doivent apparaître avec ma recherche : - Le Malade imaginaire de Molière / 2011-02-12 / 2011-02-12 - Quatuor de saxophones "AEolia" / 2011-02-15 / 2011-02-15 - Expositions photographiques / 2011-01-10 / 2011-04-15 - Exposition de Peinture ou de sculpture / 2011-01-29 / 2011-02-20 par contre les manifestations suivantes ne doivent pas s'afficher : - Concert symphonique / 2011-01-25 / 2011-01-25 - Théâtre Avenel / 2011-02-04 / 2011-02-04 - Exposition Monet / 2011-01-03 / 2011-02-07 |
|
|
00
|
|
|
#10 |
|
Membre expérimenté
![]() |
Slt ; le concept de fablot est correcte , avec >= et <= vous aurer le bon résultat , essaye de voire le champ de votre table normalement avec deux champs date de début et date de fin : format date yyyy/mm/dd là son faute .
essaye de données exemple table avec 6 enregistrements et un résultat avec ta requête avec des dates de paramètres et on verra . merci |
|
|
00
|
|
|
#11 | ||
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
Les exemples ci-dessus sont tirés de ma base de données.
En utilisant : Code :
SELECT * FROM agendav3 WHERE publish_up >= "2011-02-01" AND publish_down <= "2011-02-28" Or j'obtiens tous ces résultats (format date changé via le csv exporté) : Code :
|
||
|
|
00
|
|
|
#12 |
|
Membre expérimenté
![]() Inscription : mai 2006 Messages : 501 ![]() |
Ok j'avais pas inversé publish_up et publish_down...
Ceci dit ma première requête reste correcte : Code :
$sql = "SELECT id FROM event WHERE date_debut <= '$mois_fin' AND date_fin >= '$mois_debut'"; Donc ta requête donne : Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-28" AND publish_down >= "2011-02-01" |
|
|
10
|
|
|
#13 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
En effet, c'est beaucoup mieux !
Il me reste à exclure les manifestations qui sont passées (par exemple un concert du 04/02 s'affiche toujours), avec une routine php ça sera plus simple je pense que dans la requête |
|
|
00
|
|
|
#14 |
|
Membre expérimenté
![]() Inscription : mai 2006 Messages : 501 ![]() |
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-28" AND publish_down >= now() |
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
arf je l'avais retiré de ma première requête...
merci beaucoup ! |
|
|
00
|
|
|
#16 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
En fait avec now() on reste sur les manifs du mois en cours quel que soit le mois, donc je vais rester sur mon idée de contrôle via php
|
|
|
00
|
|
|
#17 |
|
Membre expérimenté
![]() Inscription : mai 2006 Messages : 501 ![]() |
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-28" AND publish_down >= "2011-02-01" AND publish_down >= now() |
|
|
10
|
|
|
#18 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 32 ![]() |
j'allais justement le poster, je venais de l'implémenter et de faire mes tests, donc cette fois si c'est bel et bien résolu
merci encore
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com