Signaler

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

Posez votre question Cybermate 214Messages postés samedi 25 juillet 2015Date d'inscription 29 août 2017 Dernière intervention - Dernière réponse le 4 août 2016 à 18:45 par Cybermate
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,
Utile
+0
plus moins
Bonjour,

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

A+
Cybermate 214Messages postés samedi 25 juillet 2015Date d'inscription 29 août 2017 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 214Messages postés samedi 25 juillet 2015Date d'inscription 29 août 2017 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 - 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 - 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...
Utile
+0
plus moins
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....
Utile
+0
plus moins
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 214Messages postés samedi 25 juillet 2015Date d'inscription 29 août 2017 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 214Messages postés samedi 25 juillet 2015Date d'inscription 29 août 2017 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.

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !