Les Allergies
Alimentaires
Posez votre question Signaler

[Php / MySql] DISTINCT => Dédoublonnage [Résolu]

ZIG1 1137Messages postés 7 juillet 2000Date d'inscription - Dernière réponse le 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
Lire la suite 

[Php / MySql] DISTINCT => Dédoublonnage »

21 réponses
Réponse
+5
moins plus
à la fin tu met GROUP BY ...et le champ qui doit etre unique

ça m'a résolu la problème des doublons
crackosse - 22 janv. 2012 à 03:47
peut'on avoir un exemple ? car chez moi cela ne fonctionne pas
Ajouter un commentaire
Réponse
+1
moins plus
select distinct(email) from matable;

si tu fais select distinct(email), id, autretruc, autrebidule from matable;
ca ne marchera pas
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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 ??
Ajouter un commentaire
Réponse
+1
moins plus
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 ...
Ajouter un commentaire
Réponse
+1
moins plus
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 ....
Ajouter un commentaire
Réponse
+1
moins plus
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 ??
Ajouter un commentaire
Réponse
+1
moins plus
hum, la , a froid, sans ton projet devant les yeux, c'est un peu difficile de tout comprendre ...
:-(
Ajouter un commentaire
Réponse
+1
moins plus
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 ??

Ajouter un commentaire
Réponse
+1
moins plus
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


Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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 ??

Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
comment je fais si j'ai besoin de 3 champs ??
J'ai besoin d'id et de flag :D
Y a un autre moyen ?
Ajouter un commentaire
Réponse
+0
moins plus
Mais l'idMail ne doit pas être auto-incrémenté
ou
tu fais une recherche avant d'entrer les relations ??
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 !!
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « [Php / MySql] DISTINCT => Dédoublonnage » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?