Bonjour,
J'ai un petit souci de dédoublonnage lorsque je veux exclure certains regroupements d'id connus.
Je m'explique, imaginons que j'ai une table_user
id_user nom 1 aaaa@mail.com tata 4 aaaa@mail.com toto 8 aaaa@mail.com tutu 101 bbbb@mail.com bobo 1012 aaaa@mail.com titi
Donc pour dédoublonner cette table en utilisant l'email je fais :
Ce qui retournerait un truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT COUNT(DISTINCT id), email, GROUP_CONCAT( id ORDER BY id ) AS ids FROM table_user GROUP BY email HAVING COUNT(DISTINCT id)>1;
COUNT(DISTINCT id) ids 4 aaaa@mail.com 1,4,8,1012
Ok mais ce que je souhaiterais c'est pouvoir exclure du rapprochement des éléments identifiés dans une autre table
Exemple avec une table : user_no_doublon
id users_no_doublon 1 1.8 2 1.1012
En fait cette table permettrait d'indiquer que :
- le user id 1 ne peut etre rapprocher avec le user id 8
- le user id 1 ne peut etre rapprocher avec le user id 1012
Et en arrivant à joindre ces exclusions à la première requete obtenir :
COUNT(DISTINCT id) ids 2 aaaa@mail.com 1,4
et les 2 users concernés seraient uniquement les users : 1 et 4
Voila j'espère être assez clair, merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 CREATE TABLE IF NOT EXISTS `table_users` ( `id` int(11) NOT NULL, `email` varchar(150) NOT NULL, `nom` varchar(150) NOT NULL, PRIMARY KEY (`id`), KEY `email` (`email`), KEY `nom` (`nom`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `table_users` (`id`, `email`, `nom`) VALUES (1, 'aaaa@mail.com', 'tata'), (4, 'aaaa@mail.com', 'toto'), (8, 'aaaa@mail.com', 'tutu'), (101, 'bbbb@mail.com', 'bobo'), (1012, 'aaaa@mail.com', 'titi'); CREATE TABLE IF NOT EXISTS `user_no_doublon` ( `id` int(11) NOT NULL, `users_no_doublon` varchar(150) NOT NULL, PRIMARY KEY (`id`), KEY `email` (`users_no_doublon`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `user_no_doublon` (`id`, `users_no_doublon`) VALUES (2, '1.1012'), (1, '1.8');
Partager