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

Requêtes MySQL Discussion :

Requête qui fonctionne mais ne donne pas le résultat attendu ?


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Requête qui fonctionne mais ne donne pas le résultat attendu ?
    Bonjour,

    Je voudrais récupérer le nombre d'interventions de chaque personnel entre le 01/01/2010 à 00:00:00 et le 31/12/2010 à 23:59:59.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
         CONCAT(b.prenom,' ',b.nom) AS nom,
         COUNT(b.id) AS compteur 
    FROM
         `interventions_personnels` a,
         `personnels` b,
         `interventions` c 
    WHERE
         c.horaire_declenchement BETWEEN '2010-01-01 00:00:00' AND '2010-12-31 23:59:59'
         AND
         a.personnel=b.id
    GROUP BY b.id 
    ORDER BY compteur DESC, nom ASC
    Ci-dessous, les structures de mes tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    CREATE TABLE IF NOT EXISTS `interventions` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `numero_alerte` varchar(12) NOT NULL,
      `horaire_declenchement` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `horaire_dc` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `duree` time NOT NULL,
      `type` int(11) NOT NULL,
      `vehicule` int(11) NOT NULL,
      `conducteur` int(11) NOT NULL,
      `voie` int(11) NOT NULL,
      `commune` int(11) NOT NULL,
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
     
    CREATE TABLE IF NOT EXISTS `interventions_personnels` (
      `intervention` int(11) NOT NULL,
      `personnel` int(11) NOT NULL,
      PRIMARY KEY (`intervention`,`personnel`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    CREATE TABLE IF NOT EXISTS `personnels` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nom` varchar(45) NOT NULL,
      `prenom` varchar(45) NOT NULL,
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;
    J'ai un résultat pour "compteur" qui est multiplié par le nombre total d'interventions, comme par exemple, Monsieur DUPONT qui a compteur=4 interventions alors qu'il n'en a qu'une seule. Et il y a en tout 4 interventions dans la base de données.

    J'imagine que j'ai oublié un paramètre dans ma requête mais je ne sais pas lequel...

    Merci pour votre aide,
    ZiP

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu écrivais tes jointures avec la syntaxe normalisée depuis 1992, en utilisant l'opérateur JOIN, tu te rendrais compte immédiatement qu'il te manque une condition de jointure !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT CONCAT(b.prenom,' ',b.nom) AS nom,
      COUNT(b.id) AS compteur 
    FROM interventions_personnels AS a
    INNER JOIN personnels AS b ON a.personnel=b.id
    INNER JOIN interventions AS c ON -- Manque condition de jointure !
    WHERE c.horaire_declenchement BETWEEN '2010-01-01 00:00:00' AND '2010-12-31 23:59:59'
    GROUP BY b.id 
    ORDER BY compteur DESC, nom ASC
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    La table "interventions" est utilisée uniquement pour le champ "horaire_declenchement".

    Quelle condition dois-je mettre dans ce cas pour ma jointure ?

    Merci,
    ZiP

  4. #4
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    J'ai résolu mon problème avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT CONCAT(b.prenom,' ',b.nom) AS nom, COUNT(b.id) AS compteur 
    FROM interventions_personnels AS a
    INNER JOIN personnels AS b ON a.personnel=b.id
    INNER JOIN interventions AS c ON c.id=a.intervention
    WHERE c.horaire_declenchement BETWEEN '2010-01-01 00:00:00' AND '2010-12-31 23:59:59'
    GROUP BY b.id 
    ORDER BY compteur DESC, nom ASC
    Merci,
    ZiP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une requète qui ne donne pas le résultat attendu
    Par JeanNoel53 dans le forum Firebird
    Réponses: 1
    Dernier message: 17/12/2013, 10h23
  2. Une requête qui ne donne pas le résultat attendu
    Par JeanNoel53 dans le forum Visual C++
    Réponses: 4
    Dernier message: 30/10/2013, 11h35
  3. Réponses: 3
    Dernier message: 29/07/2011, 11h54
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. Concaténation ne donne pas le résultat attendu
    Par artotal dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2006, 01h37

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