Menu

Compter des doublons mono-colonne dans une table [Résolu/Fermé]

Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 26 juil. 2016 à 23:26 - Dernière réponse : Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention
- 4 août 2016 à 18:45
Bonjour,

je possède une table client qui possède les colonnes suivantes : id , nom, prénom, tel, mail.
Je voudrais afficher seulement les clients qui ont soit le même nom soit le même téléphone.

Voici ma requête :

SELECT COUNT(nom) AS nbr_nom, COUNT(tel) AS nbr_tel, nom, prenom, tel, mail
FROM tb_clients
GROUP BY nom, prenom, tel, mail
HAVING nbr_nom > 1 OR nbr_tel > 1
ORDER BY id DESC


Sauf que cette requête ne me retourne aucun résultat alors que j'ai intentionnellement rentré des doublons sur les noms.

Lorsque je fais la requete comme ceci :

SELECT
COUNT(nom) AS nbr_nom, nom
FROM tb_clients
GROUP BY nom
HAVING nbr_nom >1
ORDER BY id DESC


Cela fonctionne, je ne comprend pas pourquoi ça ne marche pas si j'ajoute des colonnes dans le select.

Avez-vous une idée?

Merci d'avance,
Afficher la suite 

19 réponses

Utilisateur anonyme - 27 juil. 2016 à 23:02
0
Merci
Bonjour,

si tu enlèves ta clause HAVING, quels sont les résultats ??

A+
Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 29 juil. 2016 à 12:22
Non je confirme bien qu'il y a des doublons, j'ai une page qui affiche l'intégralité des clients via un simple SELECT couplé un script PHP affichant en rouge les numéros apparaissant au moins deux fois.

De plus le champs téléphone est bien en varchar pour éviter le problème du 0 considéré du coup comme "inutile".

Constatez par vous-même :

http://prntscr.com/bz059i
Utilisateur anonyme - 29 juil. 2016 à 18:47
C'est peut-être normal qu'il te renvoie aucune ligne...

En effet, tu regroupes sur le nom, prénom du client, alors que dans ton exemple tu as aucun doublon nom, prénom...

No ?
Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 29 juil. 2016 à 20:52
Ah oui du coup ça reset le compteur à chaque nom :(
Bon je vais remodifier ça.
Utilisateur anonyme > Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 29 juil. 2016 à 20:58
Laisses que le nom (retires prénom et téléphone) dans le group by pour tester...

A+ et tiens nous au jus.
Utilisateur anonyme > Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 29 juil. 2016 à 21:06
Pas exactement, disons que tu n'as qu'un téléphone pour le "trio" (nom, prenom, tel) sur lequel tu fais ton regroupement...
forum92 179 Messages postés lundi 6 juillet 2015Date d'inscription 1 avril 2018 Dernière intervention - 1 août 2016 à 14:29
0
Merci
quand tu fais ta requete:
SELECT
COUNT(nom) AS nbr_nom, nom
FROM tb_clients
GROUP BY nom
HAVING nbr_nom >1
ORDER BY id DESC

tu travail qu'avec les noms. Du coup tu regroupe que par nom. Cela marche
tu regarde si il y a le même nom plusieurs fois. si oui t'affiche le total et le ou les noms correspondants.

or quand tu fait cette requete :
SELECT COUNT(nom) AS nbr_nom, COUNT(tel) AS nbr_tel, nom, prenom, tel, mail
FROM tb_clients
GROUP BY nom, prenom, tel, mail
HAVING nbr_nom > 1 OR nbr_tel > 1
ORDER BY id DESC

tu compte si il y a des noms ou des téléphone qui se répète mais au moment de regrouper, tu regroupe par nom prenom tel et mail. donc "l'ordinateur" se dit si je regroupe par nom prenom te et mail j'ai pas de doublons.

voila je crois que c'est pour cela que ca marche pas....
Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 2 août 2016 à 22:53
0
Merci
Bonjour,

J'en suis venu à cette requête pour déjà compter les doublons:


SELECT COUNT(*) AS nbr_commun
FROM tb_clients C1
INNER JOIN tb_clients C2
Where (C1.cln_nom = C2.cln_nom OR C1.cln_telephone = C2.cln_telephone)
AND C1.cln_id <> C2.cln_id


Elle fonctionne parfaitement, maintenant je n'ai plus qu'à rajouter les autres colonnes que je souhaite rajouter.


SELECT cln_nom, cln_telephone, cln_mail......
FROM tb_clients C1
INNER JOIN tb_clients C2
Where (C1.cln_nom = C2.cln_nom OR C1.cln_telephone = C2.cln_telephone)
AND C1.cln_id <> C2.cln_id
Utilisateur anonyme - 2 août 2016 à 23:02
Et ?

Quelle est la question ??

A+
Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 2 août 2016 à 23:31
Ah aucune, c'était juste pour dire où j'en étais dans la résolution du problème, je vais tester la dernière requête et je vous redirai ce qu'il en est.
Cybermate 221 Messages postés samedi 25 juillet 2015Date d'inscription 19 février 2018 Dernière intervention - 4 août 2016 à 18:45
SELECT * FROM tb_clients WHERE cln_nom IN(SELECT cln_nom FROM tb_clients GROUP BY cln_nom HAVING COUNT(cln_nom)>1)

Voici la requête finale qui fonctionne très bien.