IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Un problème avec le comparatif BETWEEN


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut Un problème avec le comparatif BETWEEN
    Bonjour tout le monde,

    Je souhaite utiliser BETWEEN dans une requete, mais sans succès, le problème c'est que je l'ai déjà utilisé plusieurs fois !!!
    voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	$from = 20150801 ;
    	$to = 20151005 ;
    $result1 =mysql_query ("SELECT SUM($kpi) AS nbr FROM hy_u2 WHERE date_stat BETWEEN $from AND $to " )  or die(mysql_error()."\n".$requete);
    	$donnees1 = mysql_fetch_array($result1);
    	return $donnees1['nbr'];
    ça me donne l'erreur :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND' at line 1

    je ne comprends rien !

    dans la table le champs date_stat est un int

    une idée sur l'origine de ce problème ?

    Merci à vous

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 56
    Par défaut
    Bonjour,

    tu es en php ?

    $kpi ne devrait pas etre concaténé dans ta requete ?

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    A quoi ressemble la requête affichée dans l'erreur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Bnnjour et merci pour vos réponses
    tu es en php ?

    $kpi ne devrait pas etre concaténé dans ta requete ?
    Oui je suis en PHP. Pour la concaténation je ne pense pas (mais j'ai testé quand même ), quand je remplace $from et $to par des chiffres la requête marche

    A quoi ressemble la requête affichée dans l'erreur ?
    en fait c'est celle que j'ai rédigé dans le premier post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $result1 =mysql_query ("SELECT SUM($kpi) AS nbr FROM hy_u2 WHERE date_stat BETWEEN $from AND $to " )  or die(mysql_error()."\n".$requete);
    	$donnees1 = mysql_fetch_array($result1);
    	return $donnees1['nbr'];

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par skins
    dans la table le champs date_stat est un int
    Cela devrais être une date

    peux-tu nous donner un set de tes données, pour voir ce qui a dans ta db ?

    De plus, n'oublie pas que les fonction mysql_ sont déprécié et abandonnées dans la nouvelle version de PHP7

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Bonjour MaitrePylos
    Ci-dessous un enregistrement test :
    Nom : Sans titre.png
Affichages : 101
Taille : 10,0 Ko

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Essaye ceci pour voir
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT * FROM hy_u2 WHERE date_stat BETWEEN  CAST('20150801' AS DATETIME) AND CAST('20151005' AS DATETIME);

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Re,

    J'ai testé votre code, je n'ai plus d'erreur, mais aucun résultat ne s'affiche

  9. #9
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    TIMESTAMP Alors
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM hy_u2 WHERE date_stat BETWEEN  CAST('20150801' AS TIMESTAMP) AND CAST('20151005' AS TIMESTAMP);

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT SUM($kpi) AS nbr FROM hy_u2 WHERE date_stat BETWEEN '$from' AND '$to' "
    Ou (comme je préfère l'écrire, pour la coloration syntaxique) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT SUM(".$kpi.") AS nbr FROM hy_u2 WHERE date_stat BETWEEN '".$from."' AND '".$to."' "

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    en fait c'est celle que j'ai rédigé dans le premier post :
    Tu ne l'as pas mise dans le premier message. Le message d'erreur SQL est suivi de $requete. C'est ça qu'il faudrait voir.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    désolé de vous décevoir mais ça ne marche pas ...
    je suis aussi étonné ! je ne vois pas pourquoi ça ne marche pas !

  13. #13
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Pourquoi date_stat est un int et pas une date ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Dire "ça ne marche pas" n'avance à rien du tout.

    Tu ne veux toujours pas nous montrer ce qu'affiche :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT SUM(".$kpi.") AS nbr FROM hy_u2 WHERE date_stat BETWEEN '".$from."' AND '".$to."' "
    ??

    As-tu au moins ESSAYE cette requête ???

    Comment veux-tu qu'on contrôle si ce que tu fais est juste ou non ?


    [EDIT] Dans :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT SUM($kpi) AS nbr FROM hy_u2 WHERE date_stat BETWEEN $from AND $to "
    Je ne serais pas surpris d'apprendre que c'est le $from qui pose problème, car "from" est un MOT RÉSERVÉ en SQL !

    Essaie un peu avec :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT SUM($kpi) AS nbr FROM hy_u2 WHERE date_stat BETWEEN $date_from AND $date_to "

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses et vos conseils !

    je viens de faire les modifications suivantes :
    1-Renomé les variables from et to ==> date_du et date_au.
    2-Modifié le type du champ date_stat ==> type DATE

    l'enregistrement maintenant dans la base (en ce qui concerne le champ date_stat ) ressemble à ça : 2015-09-03, 2015-09-04, ....

    j'ai testé les syntaxes suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(".$kpi.")  FROM hy_u2 WHERE date_stat BETWEEN  CAST('".$date_du."' AS DATETIME) AND CAST('".$date_au ."' AS DATETIME) "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(".$kpi.")  FROM hy_u2 WHERE date_stat BETWEEN  CAST('".$date_du."' AS DATE) AND CAST('".$date_au ."' AS DATE); "
    Pas d'erreur ni de résultat.
    En suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(".$kpi.")  FROM hy_u2 WHERE date_stat BETWEEN  CAST($date_du AS DATETIME) AND CAST($date_au  AS DATETIME) "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(".$kpi.")  FROM hy_u2 WHERE date_stat BETWEEN  CAST($date_du AS DATE) AND CAST($date_au' AS DATE); "
    cela donne l'erreur :
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS DATETIME) AND CAST( AS DATETIME)' at line 1

    En suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(".$kpi.")  FROM hy_u2 WHERE date_stat BETWEEN $date_du  AND $date_au
    cela donne l'erreur :
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND' at line 1

    En fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(".$kpi.") AS nbr FROM hy_u2 WHERE date_stat BETWEEN '".$date_du."' AND '".$date_au."' "
    Pas de résultat

    j'ai attribué des valeurs aux variables $date_du et $date_au pour être sûr qu'il n y' a pas de problème au niveau du datepicker

    Une petite idée svp ?

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tant qu'on n'aura pas vu $requete dans l'erreur comme demandé plusieurs fois ....
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Désolé ... comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            $date_du = "2015-09-02" ;
    	$date_au = "2015-09-04";
     
    	function Somme($kpi) {
    	$result1 =mysql_query ("SELECT SUM(".$kpi.") AS nbr FROM hy_u2 WHERE date_stat BETWEEN '".$date_du."' AND '".$date_au."' " )  or die(mysql_error()."\n".$requete);
    	$donnees1 = mysql_fetch_array($result1);
    	return $donnees1['nbr'];
    	}

  18. #18
    Membre chevronné
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Par défaut
    Bonjour,

    - date_du et date_au ne seront pas accessibles dans ta fonction. Il faut ajouter le mot clé global au début de ta fonction.

    - Tu stockes ta requete dans une variable, comme ça tu peux l'afficher quand bon te semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            $date_du = "2015-09-02" ;
    	$date_au = "2015-09-04";
     
    	function Somme($kpi) {
            global $data_du, $date_au;
            $requete = "SELECT SUM(".$kpi.") AS nbr FROM hy_u2 WHERE date_stat BETWEEN '".$date_du."' AND '".$date_au."' ";
    	$result1 =mysql_query ($requete)  or die(mysql_error()."\n".$requete);
    	$donnees1 = mysql_fetch_array($result1);
    	return $donnees1['nbr'];
    	}
    Et pour afficher la requête pour voir à quoi elle ressemble :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            $requete = "SELECT SUM(".$kpi.") AS nbr FROM hy_u2 WHERE date_stat BETWEEN '".$date_du."' AND '".$date_au."' ";
            var_dump($requete);
    Edit: les fonctions mysq_l sont dépréciées et seront bientot supprimées. il est recommandé de passer à mysqli_ ou PDO.

Discussions similaires

  1. [AC-2000] Problème avec date et between
    Par Titiii25 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/11/2009, 09h14
  2. probléme avec un between
    Par Pioul dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/06/2008, 12h09
  3. Réponses: 4
    Dernier message: 13/02/2006, 18h58
  4. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44
  5. Probléme avec RQ SQL BETWEEN!!!
    Par Grozeil dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/04/2005, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo