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 inefficace (sum)


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 75
    Points
    75
    Par défaut Requête inefficace (sum)
    Bonjour,

    Je ne comprend pas pourquoi la commande ne fonctionne pas.

    Voici le shéma

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE IF NOT EXISTS `bu` (
      `ID` int(11) NOT NULL auto_increment,
      `date` text collate latin1_general_ci NOT NULL,
      `nb_max` int(11) NOT NULL,
      `externe` int(11) NOT NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE IF NOT EXISTS `ip` (
      `ID` int(11) NOT NULL auto_increment,
      `IP` text collate latin1_general_ci NOT NULL,
      `date` text collate latin1_general_ci NOT NULL,
      `clic` int(11) NOT NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1;
    Voici ma commande qui doit être utiliser pour créer un vue en rajoutant juste le nombre externe de la table IP à la table bu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT bu.ID, bu.date, sum(clic) nombre, nb_max, externe
    FROM `bu` , `ip`
    GROUP BY ip.date
    HAVING bu.date = ip.date
    La commande ne m'affiche qu'une ligne de ma table.
    Merci

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Peut-être la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT bu.id, bu.date, SUM(clic) nombre, nb_max, externe
    FROM bu 
    INNER JOIN ip USING(date)
    GROUP BY ip.date
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    Ok merci cela fonctionne bien.

    Je comprend bien la requête j'aurais pu y penser.

    Mais peux tu m'expliquer pourquoi la requête que j'ai essayé ne fonctionne pas ?

    En tous cas merci.

  4. #4
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Pour l'explication il me faudrait un jeu de test, pourrais-tu m'en fournir un stp ?
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    La voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO `bu` (`ID`, `date`, `nb_max`, `externe`) VALUES
    (1, '16/05/2010', 346, 0),
    (2, '17/05/2010', 340, 0),
    (3, '18/05/2010',  323, 0),
    (4, '19/05/2010',  357, 0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO `ip` (`ID`, `IP`, `date`, `clic`) VALUES
    (1, '90.2.89.17', '16/05/2010', 2),
    (2, '90.42.65.25',  '17/05/2010', 1),
    (3, '82.231.191.113', '17/05/2010', 2),
    (4, '88.182.4.193', '17/05/2010', 2),
    (5, '64.9.156.233',  '18/05/2010', 2),
    (6, '62.147.141.8',  '18/05/2010', 2),
    (7, '109.238.12.109', '19/05/2010', 1),

  6. #6
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    J'avoue pour l'explication, même avec le jeux de données je ne comprends pas trop le fonctionnement MySQL. Par contre dans la doc tu trouves le conseil suivant lors de l'utilisation de cette fonction : N'utilisez pas HAVING pour des éléments qui devraient être dans la clause WHERE.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

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

Discussions similaires

  1. Requêt avec sum ne donne pas le bon résultat§
    Par _cece dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/11/2008, 18h53
  2. [Requête] Fonction Sum et Avg
    Par Mou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 14/05/2007, 14h17
  3. requête avec SUM
    Par jeanfi77 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/05/2007, 18h03
  4. [SQL] Requête fonction SUM
    Par ribrok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/01/2007, 16h45
  5. [SQLServer] Requête avec SUM
    Par FzF dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/05/2006, 16h19

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