Bonjour,
J'ai un programme en Php pour gérer des contacts dans une base de données MySql.
L'une des fonctionnalités est de pouvoir lister les contacts qui ont le même email, pour éventuellement supprimer ou modifier ces contacts.
Dans la table contacts, j'ai un champ email, et je peux trouver les contacts en doublon sur l'email avec cette requete:
Code :
- SELECT * FROM contacts GROUP BY email HAVING COUNT(email) > 1
|
Mais cette requête ne me donne qu'un contact par email. Et j'ai besoin de récupérer tous les contacts qui ont un email qu'on retrouve ailleur dans la table.
J'utilise alors cette requête:
Code :
- SELECT * FROM contacts WHERE email IN ( SELECT email FROM contacts GROUP BY email HAVING COUNT(email) > 1 )
|
Là, ça marche.
Le problème, maintenant, c'est que dès que la table de contacts commence à devenir un peu grande (1000, 2000 contacts....), la requete est très longue à s'executer.
J'ai déjà remarqué ça, avec MySql, quand j'utilise un WHERE avec un IN suivi d'une requête interne....
Et je me demandais, donc, si y'avait moyen de faire sans passer par une reqête interne.
J'ai vu dans un autre thread que mysql proposait une fonction group_concat, qui pourrait marcher ici, mais ça m'embète un peu: pas sûr de retrouver ça si on change de SGBD...
Voilà, voilà... si quelqu'un a une idée ?
Merci d'avance pour votre aide.
Nicolas
Message édité par dj3c1t le 09-09-2007 à 19:29:55