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 :

afficher les doublons avec mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut afficher les doublons avec mysql
    Bonjour,

    Mon problème et surement déjà connu, mais je n'ai pas trouver la réponse sur le forum (peut-être mal cherché).

    Je cherche a afficher les doublons d'une collone (pas uniquement le nombre, je veux la ligne complete). Par exemple :

    ma table :
    user(id,login, mail)

    je veux obtenir la liste des logins qui ont la meme adresse e-mail.
    avec ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select mail,login,count(*) as num from user GROUP BY mail HAVING num>1;
    J'obtiens un login, le mail et le nombre de fois que l'on trouve le mail dans la base.

    Merci dpour votre aide,

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Bonjour,

    je comprends pas trop ce qui te manque dans cette requete. Peux tu donner un exemple?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    Tout d'abord merci de ta participation

    Voila mon souci, ma requete renvoie :

    mail | login | count
    toto@toto.com | toto | 2
    tata@tata.com | tata | 3

    Je n'ai pas besoin de count, Je voudrais obtenir :

    mail | login
    toto@toto.com | toto
    toto@toto.com | bob
    tata@tata.com | tata
    tata@tata.com | titi
    tata@tata.com | tutu


    une idée ?

  4. #4
    Membre régulier Avatar de jp_rennes
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 86
    Points
    86
    Par défaut
    Essaye

    select mail,login as num from user GROUP BY mail HAVING count(*) >1;

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    J'obtiens le même résultat sans la colonne count...
    c'est à dire :

    mail | login
    toto@toto.com | toto
    tata@tata.com | tata

    au lieu de :

    mail | login | count
    toto@toto.com | toto | 2
    tata@tata.com | tata | 3

    ce n'est pas vraiment le but...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    Bon.. je pense avoir trouvé une piste... mais je suis pas vraiment sur du resultat que j'obtiens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT u1.mail, u1.login
    FROM user AS u1, 
    user AS u2
    WHERE 
    u1.mail=u2.mail 
    AND 
    u1.login<>u2.login
    Je précise que je n'ai besoin d'executer cette requete qu'une seule fois (donc pas de prob d'optimisation)

    si quelqu'un sait si c'est bon ou pas ? j'ai un dout sur le resultat car si je rajoute un "AND c1.mail<>'vide' AND c2.mail<>'vide'.. j'obtiens quand meme les lignes avec 'vide' dans le champs mail.

    merci,

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 71
    Points
    71
    Par défaut
    Ce que tu racontes n'est pas trés clair,

    Si j'ai bien compris tu veux :

    toto@toto.com | toto
    toto@toto.com | bob
    tata@tata.com | tata
    tata@tata.com | titi
    tata@tata.com | tutu

    A mon avis il te faut deux requêtes et une petite boucle, une première qui te sélectionnes les mails où count(*) > 1 et la seconde qui te liste les champs avec l'adresse mail réccupérée...

    Je pense que ta methode ne liste pas toutes les entrées ou te les liste en double ou triple ect...

    Ca donne quoi avec un GROUP BY user ?

  8. #8
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Comme l'a dit big_ben3333, tu devrais utiliser une sous requête.

    Cela devrait avoir la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT mail, login 
    FROM user
    WHERE mail
    = (
    SELECT DISTINCT mail, login, count(*) as num from user GROUP BY mail HAVING num>1);
    .

    @+.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    Je ne peux pas faire de boucle PHP, il y a trop de resultat, le temps limite d'execution de mon hébergeur est dépassé.

    En ce qui concerne une requete imbriqué, je ne sais pas comment monter ca au niveau syntaxe.

    je regarde ca, je suis dessus ...

    Mais si vous avez la syntaxe pour mysql 4, ca me ferai gagner du temps

    merci

  10. #10
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Dans la FAQ

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    merci tout le monde!

    j'ai pas reussi a faire la requete imbrique correctement malgré ton aide zoom61, merci quand meme pour le lien, il me sera bien utile.

    J'ai fait un "truc" à la main qui consiste a prendre le resultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select mail,count(*) as num from user GROUP BY mail HAVING num>1;
    De creer une requete du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select mail,login where (mail=mail1 or mail=mail2 etc...) order by mail
    à l'aide d'un bon vieux remplacer par dans un txt, la requete est super longue mais ca a marché.

    Merci à Tous

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

Discussions similaires

  1. ne pas afficher les doublons avec distinct sous mysql
    Par Abou Zar dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/01/2012, 11h49
  2. Supprimer les doublons avec order by non affiché
    Par DidRocks dans le forum Oracle
    Réponses: 1
    Dernier message: 19/09/2007, 09h42
  3. automatiser les sauvegardes avec mysql administrator
    Par beckham07 dans le forum Outils
    Réponses: 1
    Dernier message: 09/03/2006, 13h58
  4. Afficher les doublons SQL
    Par kotoji dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2005, 17h32
  5. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 09h33

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