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 16/01/2012, 16h33   #1
Nouveau Membre du Club
 
Femme
Inscription : mars 2009
Messages : 174
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : mars 2009
Messages : 174
Points : 28
Points : 28
Envoyer un message via MSN à xzéna
Par défaut afficher entre deux dates

salut,
je veux afficher tout ce qu'il y a entre deux dates choisies!
normalement on faisait:
Code :
select * from table where Date between date_debut='$date_debut' and date_fin='$date_fin'
Mais dans mon cas j'ai pas le champs date j'ai seulement date_debut et date_fin,et je voulais afficher non juste ce qui egale les deux dates mais aussi tout qui entre dans cette intervalle!
donc comment faire SVP ?
Merci d'avance.
__________________
y a pas d'autre solution..il faut apprendre !!
xzéna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 16h48   #2
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,


Code :
1
2
 
$sql= "SELECT * FROM matable WHERE monchampdate BETWEEN '".$date_debut."' AND '".$date_fin."'";
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 22h05   #3
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 989
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 : 989
Points : 581
Points : 581
Envoyer un message via Skype™ à redoran
Salam; un conseil si vous permettez evite d'utilisé des noms de champs genre Date.... c'est des noms reservés au SGBD et sa risque de généré des conflits.
+ 1 lunette un between ferai l'affaire
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h19   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 678
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 678
Points : 5 422
Points : 5 422
On pourrait avoir la structure de la table ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 12h41   #5
Nouveau Membre du Club
 
Femme
Inscription : mars 2009
Messages : 174
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : mars 2009
Messages : 174
Points : 28
Points : 28
Envoyer un message via MSN à xzéna
Merci pour vos réponses.Mais comme j'ai noté en haut j'ai pas un champ avec lequel je vais cherché!j'ai que les dates d'intervalle.cad: date_debut et date_fin.

Citation:
Envoyé par Celira Voir le message
On pourrait avoir la structure de la table ?
la structure:
Code :
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `Affecter` (
`id_Affecter` int(11) NOT NULL AUTO_INCREMENT,
  `liste` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `dateAffectation` date NOT NULL,
  `region` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `date_debut` date NOT NULL,
  `date_fin` date NOT NULL,
)
merci d'avance.
__________________
y a pas d'autre solution..il faut apprendre !!
xzéna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 13h38   #6
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Citation:
Envoyé par xzéna Voir le message
j'ai pas un champ avec lequel je vais cherché!j'ai que les dates d'intervalle.cad: date_debut et date_fin
euh... c'est quoi alors le champ "dateAffectation" ?
je crois deviner que tu te trompes sur la façon de procéder...

D'après la table que tu nous décris, si la requête souhaitée est de connaitre les enregistrements dont la date d'affectation se situe entre deux date connues alors :

Code :
$sql= "SELECT * FROM Affecter WHERE dateAffectation BETWEEN '".$date_debut."' AND '".$date_fin."'";
et dans ce cas, les champs date_debut et date_fin de la table sont inutiles.

Si la requête souhaitée est de connaitre les enregistrements dont les champs date_debut sont inférieurs à la date du jour et les champs date_fin sont supérieurs à la date du jour alors :

Code :
$sql= "SELECT * FROM Affecter WHERE date_debut < CURDATE() and date_fin > CURDATE()";
Si la requete souhaitée est de connaitre les enregistrements dont les champs date_debut sont supérieurs à une date donnée et les champs date_fin sont inférieurs à une date donnée alors :

Code :
$sql= "SELECT * FROM Affecter WHERE date_debut >= '".$date_debut."' and date_fin <= '".$date_fin."'";
sinon, il est impossible de récupérer ces enregistrements si tu n'as pas de date à comparer (dans la table, et je ne te parle pas de date_debut et date_fin !!)

un peu de doc sur les fonctions de date dans MySQL

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 13h38   #7
Membre régulier
 
franck franck
Développeur Web
Inscription : mai 2010
Messages : 98
Détails du profil
Informations personnelles :
Nom : franck franck
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2010
Messages : 98
Points : 91
Points : 91
Bonjour,

et si au lieu de faire cela:
Code :
select * from table where Date between date_debut='$date_debut' and date_fin='$date_fin'
tu fais ça:
Code :
$sql="select * from table where ( date_debut <='".$date_debut."' OR date_fin >='".$date_fin."')"
franck31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 08h09   #8
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 989
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 : 989
Points : 581
Points : 581
Envoyer un message via Skype™ à redoran
Salam ; Franck31
Code :
Citation:
Sélectionner tout - Visualiser dans une fenêtre à part

$sql="select * from table where ( date_debut <='".$date_debut."' OR date_fin >='".$date_fin."')"
je crois en matière d'optimisation de la rquête un between est plus rapide
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 10h00   #9
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Citation:
Envoyé par redoran Voir le message
je crois en matière d'optimisation de la rquête un between est plus rapide
sans doute, mais surtout, la requête n'est pas bonne : ici on récupère les éléments qui sont en dehors de la période voulue, et encore, l'opérateur OR fait que la requête va en fait ramener exactement l'inverse de ce que l'on veut obtenir. bref, les opérateurs sont dans le mauvais sens (inférieur, supérieur et comparaison)

Clairement, un between est adapté.

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 10h28   #10
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 989
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 : 989
Points : 581
Points : 581
Envoyer un message via Skype™ à redoran
Re ; +1 lunette
j'ai pas lu toute la requête , mais vous avez raison surtout si on a une table conséquente en plus en web.
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h21.


 
 
 
 
Partenaires

Hébergement Web