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 :

Concaténer plusieurs champs d'une même table [MySQL-5.6]


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut Concaténer plusieurs champs d'une même table
    Bonjour,

    je souhaite concaténer des champs recoupés faisant partie d’une même table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id		user_id		user_ip
    4		971		108.54.218.114
    5		972		108.54.218.114
    6		973		108.54.218.114
    7		974		108.54.218.114
    8		975		107.222.159.246
    9		975		98.54.818.133
    Dans l’exemple ci-dessus, on peut constater que l’user avec l’adresse IP (108.54.218.114) à créer plusieurs comptes avec les identifiants de compte suivant (971, 972, 973, 974), mais aussi que l’utilisateur avec l’identifiant de compte (975) c’est connecter à partir des adresses IP suivantes (107.222.159.246, 98.54.818.133)



    Je souhaite donc formater les résultats comme ceci : (un user_id peut avoir plusieurs user_ip et vice-versa...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    user_id				user_ip
    971,972,973,974			108.54.218.114
    975				107.222.159.246, 98.54.818.133

    J'ai tenté ceci mais ça ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
    	GROUP_CONCAT(DISTINCT users_log.user_id) as ID_LOG, 
    	GROUP_CONCAT(DISTINCT users_log.user_ip) as IP_LOG
    FROM users_log	
    	GROUP BY users_log.id
    ORDER BY users_log.user_id DESC
    Si quelqu'un peut m'aider ?

    Merci d'avance de votre aide
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    quid de ce cas là ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id		user_id		user_ip
    4		971		108.54.218.114
    5		972		108.54.218.114
    6		973		108.54.218.114
    7		974		108.54.218.114
    8		975		108.54.218.114
    9		975		98.54.818.133

  3. #3
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour,


    quid de ce cas là ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id		user_id		user_ip
    4		971		108.54.218.114
    5		972		108.54.218.114
    6		973		108.54.218.114
    7		974		108.54.218.114
    8		975		108.54.218.114
    9		975		98.54.818.133
    Bonjour,

    Je ne comprends pas votre question
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    quel résultat voulez-vous afficher avec un cas comme celui présenté

  5. #5
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par punkoff Voir le message
    quel résultat voulez-vous afficher avec un cas comme celui présenté
    Comme l'exemple ci-dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    user_id				user_ip
    971,972,973,974			108.54.218.114
    975				107.222.159.246, 98.54.818.133
    Un "user_id" peut avoir plusieurs "user_ip" et vice vers ça...

    Merci de votre aide
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    et le 975 vous ne voulez donc pas le concaténer dans la 1ere ligne ? pour quelle raison ?

    Bref donnez des règles claires.


    Sinon pour le cas, il faudra passer par 2 requêtes, et les joindre avec un union ou un union all selon le résultat voulu.

    Revoyez par la même occasion le GROUP BY, vu votre 1ere requête, vous n'avez surement pas bien compris ce qu'il faisait.

  7. #7
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par punkoff Voir le message
    et le 975 vous ne voulez donc pas le concaténé dans la 1ere ligne ? pour quelle raison ?
    Oui, c’est vrai que je n’explique pas le but...

    Je cherche à déterminer et regrouper les différents comptes pour un même utilisateur en me basant sur son IP de connexion/création de compte et/ou son user_id...

    Dans l’exemple ci-dessus, on peut constater que l’user avec l’adresse IP (108.54.218.114) a créé plusieurs comptes avec les identifiants de compte suivants (971, 972, 973, 974), mais aussi que l’utilisateur avec l’identifiant de compte (975) s’est connecté à partir des adresses IP suivantes (107.222.159.246, 98.54.818.133)
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  8. #8
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par punkoff Voir le message
    et le 975 vous ne voulez donc pas le concaténé dans la 1ere ligne ? pour quelle raison ?

    Bref donnez des regles claire.


    Sinon pour le cas, il faudra passer par 2 requetes, et les joindre avec un union ou un union all selon le résultat voulu.

    Revoyez par la même occasion le GROUP BY, vu votre 1ere requete, vous n'avez surement pas bien compris ce qu'il faisait
    Pour l'union il est nécessaire que chacune des requête à concaténer retournes le même nombre de colonnes, avec les mêmes types de données et dans le même ordre. Ce qui n'est pas le cas il me semble...
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bah vous avez 2 colonnes de type varchar c'est ok

  10. #10
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bah vous avez 2 colonnes de type varchar c'est ok
    Avez-vous un exemple ?

    De mon côté, je viens de tenter quelque chose, mais toujours pareil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 
    	p1.user_id,
    	(SELECT user_ip + ',' FROM users_log p2 WHERE p2.user_id = p1.user_id ORDER BY p2.user_ip FOR XML PATH('') ) AS IPs
    FROM users_log p1
    	GROUP BY p1.user_id
    Basé sur cet article : https://www.simple-talk.com/content/...px?article=539
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Votre 1ere requête, quand vous aurez compris comment fonctionne un groupe by, fonctionnera pour un des deux concat.

    Ensuite vous n'aurez plus qu'à faire une union avec une autre requête du même type pour l'autre critère de concaténation.

  12. #12
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par punkoff Voir le message
    votre 1ere requete, quand vous aurez compris comment fonctionne un groupe by, fonctionnera pour un des deux concat.

    ensuite vous n'aurez plus qu'a faire une union avec une autre requete du même type pour l'autre critère de concaténation.
    Je n’ai pas trop envie de jouer aux charades....

    Je ne vous demande pas de m’apporter la solution sur un plat, mais de donner un exemple concret à vos explications... Je sais comment fonctionne la fonction GROUPE, même si je ne l’utilise pas correctement.

    Dans tous les cas merci quand même d’avoir pris la peine de me lire...

    Je continue mes recherches
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  13. #13
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Citation Envoyé par la_chouette Voir le message
    Je continue mes recherches
    Alors, continuez par ici : http://mysql.developpez.com/faq/?pag...ent-l-utiliser
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  14. #14
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Voici la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT user_id, GROUP_CONCAT( DISTINCT user_ip ) AS user_ip
    	FROM users_log
    	GROUP BY user_id
    HAVING COUNT( * ) >1
    	UNION 
    SELECT GROUP_CONCAT( DISTINCT user_id ) AS user_id, user_ip
    	FROM users_log
    	GROUP BY user_ip
    HAVING COUNT( * ) >1
    Merci à nos amis anglais
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Quid des singletons ?

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

Discussions similaires

  1. [AC-2003] Calcul / Somme de plusieurs champs d'une même table
    Par HenriJ dans le forum Access
    Réponses: 2
    Dernier message: 26/03/2014, 17h48
  2. Rassembler plusieurs champs d'une même table
    Par armata dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/09/2009, 16h10
  3. Update critériel de plusieurs champs d'une même table
    Par Xorbane dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/10/2007, 18h12
  4. Plusieurs Champs d'une même table dans plusieurs textebox
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/09/2006, 11h32
  5. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18

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