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

Signaler
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
-
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
-
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,

3 réponses


Bonjour,

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

A+
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
20
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 :

https://prnt.sc/bz059i
Utilisateur anonyme
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 ?
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
20
Ah oui du coup ça reset le compteur à chaque nom :(
Bon je vais remodifier ça.
Utilisateur anonyme >
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018

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 >
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018

Pas exactement, disons que tu n'as qu'un téléphone pour le "trio" (nom, prenom, tel) sur lequel tu fais ton regroupement...
Messages postés
220
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
134
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....
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
20
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
Et ?

Quelle est la question ??

A+
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
20
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.
Messages postés
222
Date d'inscription
samedi 25 juillet 2015
Statut
Membre
Dernière intervention
27 octobre 2018
20
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.