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 :

calculer le nombre d'éléments communs entre 2 champs ds mm table ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut calculer le nombre d'éléments communs entre 2 champs ds mm table ?
    Bonjour,

    voila, j'ai une table user_group avec 2 champs group_id et user_id pour contenir l'id de plusieurs groupes et les id des utilisateurs qui appartiennent à ces différents groupes.
    Et je voudrais calculer le nombre d'utilisateur communs entre 2 groupes.
    Comment faire ?

    Edit :
    ça se présente comme ça par exemple :
    group_id | user_id
    1 | 2
    1 | 3
    2 | 2
    1 | 4
    3 | 3
    2 | 4

    donc quand on fait le test pour les groupes 1 et 2, on a 2 utilisateurs communs (2 et 4).

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    pourquoi pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COUNT(T1.user_id)
    FROM group T1
       INNER JOIN group T2
          ON T1.user_id = T2.user_id
             AND T1.group_id < T2.group_id
    WHERE T1.group_id = @id_group1
       AND T2.group_id = @id_group2
    bien sûr il faut que @id_group1 < @id_group2

    si tu veux t'affranchir de ça, c'est un peu plus complexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT COUNT(T1.user_id)
    FROM group T1
       INNER JOIN group T2
          ON T1.user_id = T2.user_id
             AND T1.group_id < T2.group_id
    WHERE (
       T1.group_id = @id_group1
       AND T2.group_id = @id_group2
    ) OR (
       T1.group_id = @id_group2
       AND T2.group_id = @id_group1
    )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Variante (à essayer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT 
    	gl.group_id,
    	gr.group_id,
    	COUNT (gl.user_id)
    FROM	user_group gl
    INNER JOIN user_group gr
    ON	gl.user_id = gr.user_id
    WHERE	gl.group_id <> gr.group_id
    GROUP BY 
    	gl.group_id,
    	gr.group_id

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut
    Citation Envoyé par TheLeadingEdge
    Variante (à essayer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT 
    	gl.group_id,
    	gr.group_id,
    	COUNT (gl.user_id)
    FROM	user_group gl
    INNER JOIN user_group gr
    ON	gl.user_id = gr.user_id
    WHERE	gl.group_id <> gr.group_id
    GROUP BY 
    	gl.group_id,
    	gr.group_id
    Ca n'a pas l'air d'être ça non plus.
    J'ai pas d'erreur SQL mais ça ne fait pas ce que je veux.

  5. #5
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Swoog à raison, avec 1 '<' c'est mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT DISTINCT 
    	gl.group_id,
    	gr.group_id,
    	COUNT (gl.user_id)
    FROM	user_group gl
    INNER JOIN user_group gr
    ON	gl.user_id = gr.user_id
    AND	gl.group_id < gr.group_id
    GROUP BY 
    	gl.group_id,
    	gr.group_id
    ;
    Si tu veux aussi les user, c'est plus lourd
    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
    SELECT 	g.gl,
    	g.gr,
    	g1.user_id,
    	g.s
    FROM
    user_group g1
    INNER JOIN user_group g2
    ON 	g1.user_id = g2.user_id
    INNER JOIN
    (
    SELECT DISTINCT 
    	gl.group_id as gl,
    	gr.group_id as gr,
    	COUNT (gl.user_id) as s
    FROM	user_group gl
    INNER JOIN user_group gr
    ON	gl.user_id = gr.user_id
    AND	gl.group_id < gr.group_id
    GROUP BY 
    	gl.group_id,
    	gr.group_id
    ) g
    ON	g1.group_id = g.gr
    AND	g2.group_id = g.gl
    ;
    [edit] j'avais pas vu ta réponse. Donne 1 exemple du résultat que tu veux alors. (sauf si c'est 1 matrice!)[/edit]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut
    Citation Envoyé par TheLeadingEdge

    Si tu veux aussi les user, c'est plus lourd

    non non pas besoin pour l'instant j'aimerai déjà que ça marche comme ça

    [edit] j'avais pas vu ta réponse. Donne 1 exemple du résultat que tu veux alors. (sauf si c'est 1 matrice!)[/edit]

    J'ai modifié le 1er post, ça ne t'aide pas plus ?

  7. #7
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    quelle erreur as-tu alors ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut
    Citation Envoyé par Swoög
    quelle erreur as-tu alors ?
    #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 'GROUP T1
    INNER JOIN GROUP T2 ON T1.user_id = T2.user_id AND T
    Question de noob, mais d'où vous les sortez vos T1, T2 et gl, gr ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut
    Citation Envoyé par Swoög
    ...
    Non, ca n'a pas l'air d'être ça. Il s'agit de la même table.

  10. #10
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par RedShift2
    Non, ca n'a pas l'air d'être ça. Il s'agit de la même table.
    et alors ? ça s'appelle une auto jointure (jointure d'une table à elle-même)

    test la requête avant de critiquer s'il te plaît
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut
    Citation Envoyé par Swoög
    et alors ? ça s'appelle une auto jointure (jointure d'une table à elle-même)

    test la requête avant de critiquer s'il te plaît
    Désolé si je t'ai choqué, je suis assez nul en SQL et je ne me permettrais pas de critiquer mais je considère pas ça comme une critique. C'est juste que j'ai l'impression que ça ne correspond pas à ce que je veux.
    Et quand je teste la requête telle quelle, j'ai droit à une erreur.

    PS : J'ai édité mon premier message pour être plus clair.

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

Discussions similaires

  1. Nombre d'éléments communs entre deux tableaux
    Par momo-mtl dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 19/02/2015, 10h08
  2. Réponses: 49
    Dernier message: 26/05/2010, 21h58
  3. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  4. Comparaison de base et calculs du nombre d'éléments dans Bas
    Par BXDSPORT dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2004, 08h00

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