[Php / MySql] DISTINCT => Dédoublonnage

Résolu/Fermé
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
- 2 déc. 2005 à 15:18
 crackosse - 22 janv. 2012 à 03:47
Bonjour,

J'ai une liste d'email dans une table où chaque email est associé à une catégorie.
Il se peut que le mail se trouvent là plusieurs foies s'il fait référence à plusieur catégories.

Au moment d'envoier les mail ... je voudrais ne pas en envoier plusieur à une même personne alors j'ai fait

SELECT DISTINCT(email), id ...

Mais ca ne marche pas il continue a tous selectionner !!!
Comment puis-je faire ??

Merci d'avance

20 réponses

el_salvadore
20 août 2008 à 23:36
à la fin tu met GROUP BY ...et le champ qui doit etre unique

ça m'a résolu la problème des doublons
8
peut'on avoir un exemple ? car chez moi cela ne fonctionne pas
0
bacchuss
Messages postés
1162
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
6 avril 2009
191
2 déc. 2005 à 15:25
select distinct(email) from matable;

si tu fais select distinct(email), id, autretruc, autrebidule from matable;
ca ne marchera pas
2
bacchuss
Messages postés
1162
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
6 avril 2009
191
2 déc. 2005 à 15:36
pour un email, tu n'as qu'un id et un seul flag ?
si non, comment veux tu qu'il sache quel id il doit choisir
si oui tu fais :
select distinct (email, id, flag) from ....

enfin je crois, de mémoire
1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 15:47
Non, je peux avoir un mail pour différent id et flag (il n'a que 2 valeurs)


Mais je viens d'avoir une idée ...
Je peut faire une requête

select distinct(email) from matable;
Puis Select email, id, flag FROM matable Where email=email
Ca pourrait marcher, non ??
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bacchuss
Messages postés
1162
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
6 avril 2009
191
2 déc. 2005 à 15:56
oui ca ca marche mais ca fait pas mal de requetes...
mais je ne vois pas bien comment tu fais ton filtre.
tu veux tous les email de ta table ou seulement certains ?

tu es sur que ta table est correctement constituée ? bizarre d'avoir la meme @ email plusieurs fois dans la meme table ...
1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 16:08
Je sais ... effectivement ...
Mais je ne sais pas comment faire autrement ... pour l'instant ...

Pour l'instant je géres mes catégorie avec une liste déroulante ... mais comment faire pour le faire par case à cocher et donc avoir un nombre illimité de catégories par mail ...

Et pourvoir faire des recherches par catégories ...
Je dois pouvoir classer mes mails par catégories et dans ce genre de cas pouvoir les faire apparaitre plusieurs ... dans chaque catégories concernés ....
1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 16:21
j'ai changé mes données pour avoir des données du type
id email categorie1|categorie3|categorie4|

Mais quand je veux afficher mes données classé par catégories ma requête ne fonctionne plus ...

Comment faire ??
1
bacchuss
Messages postés
1162
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
6 avril 2009
191
2 déc. 2005 à 16:30
hum, la , a froid, sans ton projet devant les yeux, c'est un peu difficile de tout comprendre ...
:-(
1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 16:38
Ok,

J'ai une table avec id, mail, flag, categorie
si j'entre plus d'un numéro dans "catégorie", je dois les insérer comme suit 1|2|4|6 n'est-ce pas ?

Si tel est le cas comment puis je faire une requête en filtrant sur catégorie.
Cet "élèment" que nous venons de rentrer doit aparaître sous les catégorie 1,2,4 et 6 comment faire cette requête ??

1
bacchuss
Messages postés
1162
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
6 avril 2009
191
2 déc. 2005 à 16:50
quand tu dis plus d'un numero dans "categorie", cela veut dire que tu inseres plusieurs enregistrements dans ta table
genre:
id   mail          flag         categorie
1  toto@..        0                   1
1  toto@..        0                   2
1  toto@..        0                   4

et non pas
id   mail          flag         categorie
1  toto@..        0                   1,2,4


1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 16:58
Si je fais comme dans ta première proposition, je vais me retrouvé avec le même souci de doublon au niveau des mails ...
Et quand j'écrirait ... j'enverrai un certain nombre de mail à la même personne ... et c'est ca que je veux éviter
1
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
61
2 déc. 2005 à 17:00
Rien compris du tout à ton explication ^_^.

Je vois un truc qui ne va pas dans ta table, tu as une relation n-n entre deux entités, catégorie et email. Une catégorie peut contenir 0 ou plusieurs mails et un mail peut appartenir a 0 ou plusieurs catégories.

je te propose donc de créer 3 tables dont une qui sera la relation entre catégorie et email.

############
#tab_categorie #
#-----------------#
#id_categorie # <- clef primaire
#lib_categorie #
############

############
# tab_mail #
#-------------------#
#id_mail # <- clef primaire
#lib_mail #
############

###############
# tab_mail_categorie #
#------------------------#
# id_mail # _
# id_categorie # _|- clef primaire sur les deux champs
###############

Ensuite pour le code, comme je n'ai pas bien compris ce que tu veux je dirais : tu sors tous tes mails qui appartiennent au moins à une catégorie et tu leur envoies ton message.

Autrement dit :
-----------------
SELECT DISTINCT(lib_mail)
FROM tab_mail, tab_mail_categorie
WHERE tab_mail.id_mail=tab_mail_categorie.id_mail

Bahan
1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 17:07
je suis un peu dans ce cas ...
dans le sens où je fonctionne déjà comme ca avec les catégories

mais je ne comprend pas ta table
###############
# tab_mail_categorie #
#------------------------#
# id_mail # _
# id_categorie # _|- clef primaire sur les deux champs
###############

en fait quand j'entre un nouveau contact je dois
entrer son mail dans tab_mail,
choper son id
entrer dans tab_mail_categorie idMail et idCatégorie

C'est ca ??

1
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
61
2 déc. 2005 à 17:14
Quand tu entres un nouveau contact, tu vas lui donner une id_mail unique ainsi que lui attribuer une ou plusieurs catégories.

Si tu lui attribues disons 3 catégories différentes, dans la table tab_mail_categorie, tu auras 3 enregistrements.

Exemple :
notre nouveau contact est toto@totomail.com qui aura l'id suivante : 1
Les catégories qui lui sont attribués sont : bubu (1), tutu (2) et lulu (3)

Lors de la saisie de ce nouveau contact, il va falloir insérer dans la table tab_mail_categorie les enregietrements suivants :

1 - 1
1 - 2
1 - 3

L'intéret c'est que tu peux tranquillement changer l'adresse mail de toto, tant que son id ne change pas tu n'auras pas à tout changer dans la table-relation entre mail et catégorie.

Hum hum. Suis-je clair ? ^_^

Bahan
1
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 15:27
comment je fais si j'ai besoin de 3 champs ??
J'ai besoin d'id et de flag :D
Y a un autre moyen ?
0
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 17:19
Mais l'idMail ne doit pas être auto-incrémenté
ou
tu fais une recherche avant d'entrer les relations ??
0
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
61
2 déc. 2005 à 17:23
Yep les identifiants des tables tu peux leur mettre un auto-increment.

Dans ce cas, quand tu viens d'insérer un contact, tu prends l'id le plus haut et c'est bon. (Basiquement, hein ? Le mieux est de faire des tests quand même.)

Mais sinon ce que tu dis est même mieux. Faire une recherche après l'insertion (vérifier qu'elle s'est bien déroulé) est une très bonne idée.

Tu en ressorts l'id_mail que tu injectes ensuite dans tab_mail_categorie avec les id_categorie associées.

Bahan
0
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
2 déc. 2005 à 17:27
Mais par contre je ne peux plus les insérer simplement avec un *.sql
ou tout autre export ... il va falloir absolument passer par l'application !!
0
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
61
2 déc. 2005 à 17:36
Mais par contre je ne peux plus les insérer simplement avec un *.sql

Si bien sûr.

Exemple, une fois que tu as insérée tes id par des requêtes de type INSERT.
------------
SELECT id_mail, id_categorie 
FROM tab_mail, tab_categorie 
WHERE lib_mail='toto@totomail.com' 
AND lib_categorie='lulu'
INTO TABLE tab_mail_categorie;

Bahan
0
ZIG1
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
5 déc. 2005 à 14:28
Allo,

Suite à une longue reflection ... il n'y aura pas de doublon d'email ... Dans le champ IdCategories ... il pourra y avoir plusieurs id et je fait un select avec Like ....

Merci pour l'aide à la reflexion :D
0