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 :

Comment utiliser la fonction EXCEPT


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    salarie
    Inscrit en
    Avril 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : salarie

    Informations forums :
    Inscription : Avril 2022
    Messages : 15
    Par défaut Comment utiliser la fonction EXCEPT
    Bonjour,
    je souhaite faitre une moyenne sur ma base de donnée en groupant les données par jour. Mais je ne voudrais pas inclure la journées en cours. j essaye donc d appliquer la fonction EXCEPT mais cla ne fonctionne pas. Pouvez vous m indiquer ou je pèche ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $chartQuery = "SELECT date_format(Date,'%d-%m %Y 
               ') AS datum, round(avg(Vents),1) as Vents FROM DAVIS  group by date(Date) order by avg(Vents) asc  LIMIT 1 EXCEPT  SELECT date_format(Date,'%d-%m %Y 
               ') AS datum, round(avg(Vents),1) as Vents FROM DAVIS WHERE date(Date)= CURRENT_DATE()";
    Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXCEPT SELECT date_format(Date,'%d-%m %Y ') AS datum, round(avg...' at line 1 in C:\Program Files\Ampps\www\statventminjour.php:16 Stack trace: #0 C:\Program Files\Ampps\www\statventminjour.php(16): mysqli_query() #1 C:\Program Files\Ampps\www\statistiques.php(115): include('C:\\Program File...') #2 {main} thrown in C:\Program Files\Ampps\www\statventminjour.php on line 16

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    MySQL ne supporte pas EXCEPT.

    Tu peux simplement exclure la journée en cours avec un WHERE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    WHERE DATE(ta_colonne_date) <> DATE(NOW())
    ...

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 589
    Billets dans le blog
    10
    Par défaut
    @Seb : MYSQL n'accepte pas EXCEPT, mais l'implémente (bizarrement ) à l'identique sous le nom MINUS

    Le prédicat "différent de" n'étant pas SArgAble (aucun index si présent n'est éligible), il faut éviter dans la mesure du possible de l'utiliser comme restriction ou comme critère de jointure. Sauf si le volume de la table considérée est très faible bien sûr.

    @mykerinos1 : comparez dans un EXPLAIN l'une et l'autre solution pour vérifier laquelle est la plus performante dans votre contexte.
    Attention : un explain réalisé dans un environnement ne préjuge en rien le résultat dans un autre environnement.
    Il n'est pas rare que le même explain fait sur une base de test peu chargée produise un résultat différent sur une base de production.
    D'où l'intérêt de faire l'explain sur l'environnement cible

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Si tu ne t'intéresses qu'aux journées antérieures à la journée en cours, tu peux faire simple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT date_format(`Date`,'%d-%m %Y') AS datum,
    round(avg(Vents),1) as Vents 
    FROM DAVIS  
    where `Date` < curdate()
    group by date(`Date`) 
    order by avg(Vents) asc  
    LIMIT 1
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 402
    Par défaut
    Bonjour,
    Dixit l'aide en ligne, si tu utilises un ORDER BY et/ou un LIMIT dans une des requêtes avec un UNION il faut mettre les requêtes entre parenthèses.
    J'imagine donc que c'est la même chose avec un MINUS.

    Tatayo.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 589
    Billets dans le blog
    10
    Par défaut
    À noter : "date" étant un mot réservé SQL, il faut le délimiter avec des quotes inversées pour MySQL (Alt-GR + 7) ou des Guillemets pour tout autre SGBD, pour manipuler la colonne ainsi nommée.
    L'idéal étant de ne jamais utiliser de mot réservé ni de caractères spéciaux dans les noms d'objets, ça simplifie bien les choses

Discussions similaires

  1. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    Réponses: 3
    Dernier message: 24/02/2006, 16h59
  2. [Excel] Comment utiliser la fonction RECHERCHEV
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 03/02/2006, 11h43
  3. Réponses: 3
    Dernier message: 31/12/2005, 23h09
  4. Comment utiliser la fonction NBR.JOURS.OUVRES?
    Par MEHCOOPER dans le forum Access
    Réponses: 9
    Dernier message: 20/10/2005, 12h50
  5. Réponses: 11
    Dernier message: 22/12/2003, 21h06

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