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 :

Somme de 3 COUNT() sur 3 tables différentes


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut Somme de 3 COUNT() sur 3 tables différentes
    Salut,

    je travaille avec PHP sous mySQL.
    Je voudrais obtenir la somme de ces trois COUNT()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT COUNT( ID ) AS qte
    FROM dico
    WHERE MotsClefs
    LIKE '%TEST%'
    UNION SELECT COUNT( ID ) AS qte
    FROM photos
    WHERE MotsClefs
    LIKE '%TEST%'
    UNION SELECT COUNT( ID ) AS qte
    FROM faqs
    WHERE MotsClefs
    LIKE '%TEST%'
    Actuellement, je récupère la valeur du premier seulement (c'est à dire le nombre d'enregistrements correspondants dans la table dico).

    Après quelques recherches sur COUNT() et SUM()...
    Ce n'est peut être pas le bon chemin...

    Une piste ?

    Merci !

  2. #2
    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
    Essaye (certains moteurs n'acceptent pas le FROM (SELECT...), pour mySQL, cela dépend de la version (existe au moins dans la 4.1)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT SUM(Qte)
    FROM (SELECT COUNT( ID ) AS qte 
          FROM dico 
          WHERE MotsClefs 
          LIKE '%TEST%' 
          UNION SELECT COUNT( ID )
          FROM photos 
          WHERE MotsClefs 
          LIKE '%TEST%' 
          UNION SELECT COUNT( ID ) 
          FROM faqs 
          WHERE MotsClefs 
          LIKE '%TEST%')
    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

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Arf je viens d'essayer, sans succès (erreur de syntaxe).

    Version 4.0.20 de mySQL

  4. #4
    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
    je ne sais pas si ta version de MySql accepte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT COUNT( ID )+ (SELECT COUNT( ID )  
                                       FROM photos 
                                       WHERE MotsClefs LIKE '%TEST%' )+
          ( SELECT COUNT( ID ) 
             FROM faqs 
             WHERE MotsClefs LIKE '%TEST%')
    FROM dico 
    WHERE MotsClefs 
    LIKE '%TEST%'
    A+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Encore testé, ça ne fonctionne pas

  6. #6
    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
    J'ai une solution qui n'est pas à généraliser.
    Pour cela je souhaiterai savoir si ID est unique, et si le
    count(distinct ID) est permis dans MySql.

    A+

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Oui, ID est unique.

    Pour le COUNT(DISTINCT ID) je ne sais pas désolé...

    Je pourrais toujours essayer ta solution car actuellement, je fais 3 requêtes

  8. #8
    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
    Je pense que ta solution est plus sage.
    la mienne fait un produit cartesien entre les trois tables et si le nombre de lignes est important dans chacune d'elle ceci sera trop lent.
    Je te la donne comme même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT COUNT( distinct d.ID )+COUNT( distinct p.ID )+
                COUNT( distinct f.ID ) AS qte 
          FROM dico d,photos p,faqs f
          WHERE Substring(d.MotsClefs,pos(d.MotsClefs,'TEST'),4)=
                     Substring(p.MotsClefs,pos(p.MotsClefs,'TEST'),4)
          And     Substring(p.MotsClefs,pos(p.MotsClefs,'TEST'),4)=
                     Substring(f.MotsClefs,pos(f.MotsClefs,'TEST'),4)
    je ne sais comment elle est nommé dans MySql "pos" permet de chercher une sous chaine dans une chaine et retourne la position.

    A+

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Merci pour l'idée.

    Je suis allé voir sur SQLPro et j'ai trouvé l'équivalent (je pense) : INSTR().

    Après quelques tests, les requêtes me renvoient un résultat qui ne correspond pas (qui correspond à quoi d'ailleurs ?).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT( DISTINCT d.ID ) + COUNT( DISTINCT p.ID ) + COUNT( DISTINCT f.ID ) AS qte
    FROM dico d, photos p, faqs f
    WHERE Substring( d.MotsClefs, INSTR( d.MotsClefs, 'TEST' ) , 4 ) = Substring( p.MotsClefs, INSTR( p.MotsClefs, 'TEST' ) , 4 ) AND Substring( p.MotsClefs, INSTR( p.MotsClefs, 'TEST' ) , 4 ) = Substring( f.MotsClefs, INSTR( f.MotsClefs, 'TEST' ) , 4 )
    Je pense que je vais devois me coltinner mes 3 requêtes

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    J'ai trouvé !

    Voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT( DISTINCT d.ID ) + COUNT( DISTINCT p.ID ) + COUNT( DISTINCT f.ID ) AS qte
    FROM dico d, photos p, faqs f
    WHERE d.MotsClefs
    LIKE '%TEST%' AND p.MotsClefs
    LIKE '%TEST%' AND f.MotsClefs
    LIKE '%TEST%'
    Tu m'as bien mis sur la voix MAMMAR, merci à tous !

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

Discussions similaires

  1. Select + where + count sur 2 tables différentes
    Par Cedios dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/10/2011, 19h13
  2. COUNT sur plusieurs tables différentes
    Par Blade dans le forum Langage SQL
    Réponses: 8
    Dernier message: 23/11/2008, 22h29
  3. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21
  4. Requete COUNT sur 3 tables
    Par Le-Cortex dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h39
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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