Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum 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 09/02/2011, 16h47   #1
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
Par défaut [mysql]Affichage de résultats selon le mois choisi

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 !
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 16h54   #2
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
EDIT : J'étais partis sur l'affichage, désolé.
La réponse fournie par stealth35 est la plus propre à mon goût.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 16h58   #3
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
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'";
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h03   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
utilises YEAR et MONTH
http://dev.mysql.com/doc/refman/5.0/...functions.html
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h18   #5
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
Citation:
Envoyé par Fabllot Voir le message
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'";
Avec :
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-01" AND publish_down >= "2011-02-28"
ça ne va pas vraiment, il manque pas mal de résultats.

J'ai bien essayé avec year et month, mais je patauge dans mes essais fantaisistes...
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h58   #6
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Citation:
Envoyé par badseyar Voir le message
Avec :
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-01" AND publish_down >= "2011-02-28"
ça ne va pas vraiment, il manque pas mal de résultats.

J'ai bien essayé avec year et month, mais je patauge dans mes essais fantaisistes...
Certes, ce n'est pas ce que j'ai écrit !

Si je comprends ton code, essais plutôt
Code :
SELECT * FROM agendav3 WHERE publish_up >= "2011-02-01" AND publish_down <= "2011-02-28"
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h18   #7
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
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.
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h39   #8
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Citation:
Envoyé par badseyar Voir le message
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.
Je suis surpris... Les comparaisons sont dans le bon sens ?
Code :
publish_up >= "2011-02-01" AND publish_down <= "2011-02-28"
Sinon qu'est-ce qu'exactement les champs publish_up et publish_down ?
Je surpris car j'utilise cette recette sur mes sites et ça marche très bien !
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h50   #9
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
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
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h31   #10
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 941
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 941
Points : 550
Points : 550
Envoyer un message via Skype™ à redoran
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
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h47   #11
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
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"
et en choisissant "Février 2011" dans ma liste, je dois avoir toutes les manifestations en cours à la date du jour ou programmée entre la date du jour et la fin du mois.
Or j'obtiens tous ces résultats (format date changé via le csv exporté) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
titre	publish_up	publish_down
Le paquet Une pièce de Philippe Claudel	18/02/2011 18/02/2011
Spectacle enfant :La chanson de Renart 	09/02/2011 09/02/2011
Quatuor de saxophones AEolia	15/02/2011 15/02/2011
Le Malade imaginaire de Molière	12/02/2011 12/02/2011
Concours de Pétanque	27/02/2011	27/02/2011
Loto	12/02/2011	12/02/2011
Loto	20/02/2011 20/02/2011
Concours de Belote	20/02/2011 20/02/2011
Randonnée de l amicale Laïque	13/02/2011 13/02/2011
Bourse vide grenier	12/02/2011 12/02/2011
Sacrifices de et par Nouara Naghouse	01/02/2011	01/02/2011
Concert de Manu Galure	04/02/2011 04/02/2011
Les Danses de l intime	08/02/2011 08/02/2011
Concours de Poker	19/02/2011 19/02/2011
Soirée dansante Année 80	19/02/2011 19/02/2011
Exposition	01/02/2011 25/02/2011
donc il y a des manifs qui n'ont pas leur place (ex : Concert de Manu Galure) et il en manque (ex : Expositions photographiques / 2011-01-10 / 2011-04-15)
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 12h37   #12
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
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'";
On a publish_up = date_debut et publish_down = date_fin, mais pour moi le mois de février commence au 1er et fini au 28 et non l'inverse !
Donc ta requête donne :
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-28" AND publish_down >= "2011-02-01"
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2011, 13h28   #13
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
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
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h09   #14
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-28" AND publish_down >= now()
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h32   #15
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
arf je l'avais retiré de ma première requête...

merci beaucoup !
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h36   #16
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
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
badseyar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 16h07   #17
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Code :
SELECT * FROM agendav3 WHERE publish_up <= "2011-02-28" AND publish_down >= "2011-02-01" AND publish_down >= now()
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2011, 16h10   #18
Invité régulier
 
Inscription : mai 2003
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2003
Messages : 32
Points : 7
Points : 7
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
badseyar 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 06h27.


 
 
 
 
Partenaires

Hébergement Web