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 :

Count dans plusieurs tables


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut Count dans plusieurs tables
    Salut,
    je voudrais savoir s'il existe un code qui permet de faire un contage dans plusieurs table ?
    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'" ';
    Mais pour la table membre, membre2, membre3, membre4, membre5
    ou alors on est obligé de le faire une par une et d'additionner à chaque fois?

    Merci

  2. #2
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = 'SELECT count(auteur) as nbmess FROM forum_reponses,forum_reponses2,forum_reponses3,forum_reponses4,forum_reponses5,forum_reponses6 WHERE login="'.$data['auteur'].'" '; 
     $requ = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    Mais ca ne fonctionne pas...

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par kevinf
    ...
    Mais pour la table membre, membre2, membre3, membre4, membre5
    a priori, tu dois modéliser de manière à éviter d'avoir membre, membre2, membre3, membre4, membre5... par ex. en ajoutant à membre une colonne NumMembre qui irait de 1 à 5 ?
    (je dis ça au pif sans rien connaître à ton cas)

    Citation Envoyé par kevinf
    ou alors on est obligé de le faire une par une et d'additionner à chaque fois?
    tu peux toujours faire un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 
      (SELECT COUNT(*) FROM table1)
    +(SELECT COUNT(*) FROM table2)
    +(SELECT COUNT(*) FROM table3)
    ...
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT COUNT(*)
    FROM (
      SELECT trucmuche FROM table1
      UNION ALL
      SELECT trucmuche FROM table2
      UNION ALL
      SELECT trucmuche FROM table3
    )
    --
    Antoun

    Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
    http://www.microapp.com/livre_mysql_7873.html

  4. #4
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    J'ai mis ca:
    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
    $sql = 'SELECT COUNT(*)
    FROM (
      SELECT auteur FROM forum_reponses
      UNION ALL
      SELECT auteur FROM forum_reponses2
      UNION ALL
      SELECT auteur FROM forum_reponses3
    UNION ALL
      SELECT auteur FROM forum_reponses4
    UNION ALL
      SELECT auteur FROM forum_reponses5
    UNION ALL
      SELECT auteur FROM forum_reponses6
    )
     WHERE auteur="'.$data['auteur'].'" ';
     $requ = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
     while ($dataaa = mysql_fetch_array($requ)) { 
    echo $dataaa['nbmess'];
    }
    Et j'ai eu :
    Erreur SQL !
    SELECT COUNT(*) FROM ( SELECT auteur FROM forum_reponses UNION ALL SELECT auteur FROM forum_reponses2 UNION ALL SELECT auteur FROM forum_reponses3 UNION ALL SELECT auteur FROM forum_reponses4 UNION ALL SELECT auteur FROM forum_reponses5 UNION ALL SELECT auteur FROM forum_reponses6 ) WHERE auteur="*"
    Every derived table must have its own alias
    J'ai également eu une erreur pour l'autre...

  5. #5
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    As tu essayé :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql = 'SELECT count(*) AS total_membres 
    FROM membre_1, membre_2, membre_n 
    WHERE membre_1.login="'.addslashes($_POST['login']).' 
    OR membre_2.login="'.addslashes($_POST['login']).' "  
    OR membre_n.login="'.addslashes($_POST['login']).' " ';
     
    $result = mysql_query($sql);
     
    $nb = mysql_num_rows($result);
     
    if($nb !=0 ){
    echo 'Nombre total = ' . mysql_result($result, 0, "total_membres"); }

  6. #6
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = 'SELECT count(*) as total_membres  FROM forum_reponses, forum_reponses2, forum_reponses3, forum_reponses4, forum_reponses5, forum_reponses6 
    WHERE forum_reponses.auteur="'.$data['auteur'].'"
    AND forum_reponses2.auteur="'.$data['auteur'].'"
    AND forum_reponses3.auteur="'.$data['auteur'].'" 
    AND forum_reponses4.auteur="'.$data['auteur'].'" 
    AND forum_reponses5.auteur="'.$data['auteur'].'"  
    AND forum_reponses6.auteur="'.$data['auteur'].'" ';
    $result = mysql_query($sql);
     
    $nb = mysql_num_rows($result);
     
    if($nb !=0 ){
    echo 'Nombre total = ' . mysql_result($result, 0, "total_membres"); }
    Et j'obtiens 0 ...

  7. #7
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Normal :

    j'avais pas mis AND mais OR !

    avec AND , cela impliquerait que $data['auteur'] soit présent dans toutes les tables pour qu'il soit compté !!!!!!

    relis mon post précédent.

  8. #8
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Je vais t'avouer un truc, je l'avais deja mis le AND et j'avais quand même 0...

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    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
    $sql = 'SELECT COUNT(*)
    FROM (
      SELECT auteur FROM forum_reponses
      UNION ALL
    ...
      SELECT auteur FROM forum_reponses5
    UNION ALL
      SELECT auteur FROM forum_reponses6
    )  AS TEMPO 
     WHERE auteur="'.$data['auteur'].'" ';
     $requ = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
     while ($dataaa = mysql_fetch_array($requ)) { 
    echo $dataaa['nbmess'];
    }

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par N1bus
    As tu essayé :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = 'SELECT count(*) AS total_membres 
    FROM membre_1, membre_2, membre_n 
    WHERE membre_1.login="'.addslashes($_POST['login']).' 
    OR membre_2.login="'.addslashes($_POST['login']).' "  
    OR membre_n.login="'.addslashes($_POST['login']).' " ';
    ...
    Une série de tables dans le FROM sans jointure, c'est un produit cartésien... s'il y a 100 membres dans membre_1, 200 dans membre_2, et 300 dont un correspondant à $_POST['login'] dans membre_3, cela donnera 100 * 200 * 1 = 20 000 lignes (avec des OR). Si par malheur $_POST['login'] existe sur deux tables, cela fera 100 * 200 * 300 = 600 000 lignes...


    --
    Antoun

    Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
    http://www.microapp.com/livre_mysql_7873.html

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par kevinf
    ...
    J'ai également eu une erreur pour l'autre...
    Ce serait plus facile de te répondre si tu donnais le message d'erreur et ta requête...

  12. #12
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Merci

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

Discussions similaires

  1. Recherche de plusieurs COUNT dans plusieurs tables
    Par Anduriel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/07/2012, 11h15
  2. plusieurs count(*) dans une table
    Par EnRadeSurEclipse dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/03/2010, 14h05
  3. Réponses: 9
    Dernier message: 19/04/2009, 15h45
  4. Count dans plusieurs colonne d'une même table
    Par macfleid dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/07/2008, 20h43
  5. Réponses: 6
    Dernier message: 15/04/2004, 11h04

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