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

Langage SQL Discussion :

Comptez sur deux tables en même temps


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut Comptez sur deux tables en même temps
    Bonjour
    J'aimerais pouvoir compter les données de deux tables différentes en une requètes (une table membre et une table message) histoire d'avoir un nombre total de message et de membres. Est ce possible en une requète? Merci
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    2 façons :

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUM(N)
    FROM (SELECT COUNT(*) AS N
          FROM   message
          UNION
          SELECT COUNT(*) AS N
          FROM   membres) T
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT (SELECT COUNT(*)
            FROM   message)
         + (SELECT COUNT(*)
            FROM   membres) 
    FROM message
    WHERE ...
    Dans ce dernier cas, placer à la place de ... un prédicat renvoyant la valeur vrai pour une seule ligne de la table message.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Merci pour ta réponse J'ai essayer ta première requète mais phpMyAdmin me retourne une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #1064 - 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 'SELECT COUNT(  *  )  AS N
    FROM fsb_messages
    UNION
    SELECT COUNT
    Pour ce qui est de ta seconde requ-te je n'ai pas compris le coup de "Dans ce dernier cas, placer à la place de ... un prédicat renvoyant la valeur vrai pour une seule ligne de la table message. "

    Merci
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  4. #4
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Bonjour,
    juste une question, tu veux le total des deux tables ou un total par table ?
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par dark_genova
    Merci pour ta réponse J'ai essayer ta première requète mais phpMyAdmin me retourne une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #1064 - 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 'SELECT COUNT(  *  )  AS N
    FROM fsb_messages
    UNION
    SELECT COUNT
    Pour ce qui est de ta seconde requ-te je n'ai pas compris le coup de "Dans ce dernier cas, placer à la place de ... un prédicat renvoyant la valeur vrai pour une seule ligne de la table message. "

    Merci
    Pour la seconde requête, il faut que le test que tu mettras dans le "WHERE" ne retourne qu'un seul tuple d'une des tables (une seule ligne si tu préfères).

    Pour l'erreur de syntaxe, je ne vois pas.

  6. #6
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par lper
    Bonjour,
    juste une question, tu veux le total des deux tables ou un total par table ?
    Je voudrais un total par table, en gros choper le nombe total de membre et choper le nombre total de messages

    Mad666, je vais essayer
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  7. #7
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COUNT(*) as NB_Msg, (SELECT COUNT(*) as NB_MBR  FROM   membres) 
    FROM message
    A+

  8. #8
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Ok, c'est bien ce qu'il me semblait, la réponse de Frédéric (SQLpro) donne un total général des deux tables.
    De plus, Mysql n'accepte apparement pas les requêtes imbriquées et les unions, voir :¨
    http://sqlpro.developpez.com/SQL_AZ_F.htm

    Je te propose de chercher à transformer le Union de ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT count(*) as tot   
    FROM   membre
    UNION
    SELECT.count(*) as tot    
    FROM   message
    Peut être une requête du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COALESCE(a.count(*), b.count(*)) AS total,    
    FROM   membre A  
           FULL OUTER JOIN message b
    Mais la je ne suis pas du tout sûr du code.
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  9. #9
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Aucune de ces requètes ne marchent c'est franchement dur le SQL en fait En fait il faut aussi que je reste dans le compatible MySQL sur la plupart des serveurs
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  10. #10
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Le plus simple est de passer par deux requêtes.

    Si tu veux vraiment passer par une seule requête et si tu as des identifiants dans chacune des table tu peux faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select count(distinct msg.ident),count(distinct mbr.ident)
    from message msg, membre mbr
    A+

  11. #11
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    A quoi corespond le distinct exactement?
    j'ai essayer deux COUNT() dans une requète mais ça me donne un total assez énrome et identique pour les deux
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si, comme on peut le penser un message est envoyé par un membre, il doit y avoir un IdMembre dans la table Messagenon ?

    Si la réponse est oui, on peut faire un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*), COUNT(DISTINCT IdMembre)
    FROM Message
    Requête qui compte les messages et les membres ayant envoyé un message ; si il faut tous les membres, une jointure externe sur la table Membre doit régler le problème (dans ce cas remplacer COUNT(*) par COUNT(IdMessage).)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  13. #13
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    En effet on aproche du BUT, ca me renvoie le nombre total de message ainsi que le nombre de membres ayant poster. Mais je ne vois pas torp comment récupérer aussi ceux qui n'ont aps postés

    Bon bah j'ai trouvé, mefci de m'avoir mis sur la poste Merci bcp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(DISTINCT m.message_id), COUNT(DISTINCT me.membre_id) FROM fsb_messages m, fsb_membres me
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/05/2008, 19h01
  2. Recherche sur plusieurs tables en même temps
    Par Zouzou1er dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/10/2007, 09h40
  3. delete sur 3 tables en même temps
    Par sosophie dans le forum SQL
    Réponses: 2
    Dernier message: 07/08/2007, 16h02
  4. Requête sur deux tables en même temps
    Par will89 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/04/2006, 11h01
  5. Tri sur deux champs en même temps
    Par Azharis dans le forum Access
    Réponses: 8
    Dernier message: 11/01/2006, 13h10

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