[Php / MySql] DISTINCT => Dédoublonnage
Résolu
Utilisateur anonyme
-
crackosse -
crackosse -
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
--
..:::ZIG1:::..
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
--
..:::ZIG1:::..
20 réponses
-
à la fin tu met GROUP BY ...et le champ qui doit etre unique
ça m'a résolu la problème des doublons -
select distinct(email) from matable;
si tu fais select distinct(email), id, autretruc, autrebidule from matable;
ca ne marchera pas -
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 -
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 ??
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 ... -
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 .... -
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 ??
-
hum, la , a froid, sans ton projet devant les yeux, c'est un peu difficile de tout comprendre ...
:-( -
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 ??
-
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
-
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 -
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 -
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 ??
-
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 -
comment je fais si j'ai besoin de 3 champs ??
J'ai besoin d'id et de flag :D
Y a un autre moyen ? -
Mais l'idMail ne doit pas être auto-incrémenté
ou
tu fais une recherche avant d'entrer les relations ?? -
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 -
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 !!
-
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 -
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