supprimer des elements d'une liste

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : supprimer des elements d'une liste

par ouckileou » 29 avr. 2008, 20:37

Modération :
pat, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par pat » 29 avr. 2008, 20:26

Merci, ça marche bien.

Je n'aurai pas trouvé tout seul.

par ouckileou » 29 avr. 2008, 17:49

Alors ceci :

Code : Tout sélectionner

SELECT t_mail.mail, mail_faux FROM t_mail LEFT OUTER JOIN mail_faux ON t_mail.mail = mail_faux.mail_faux WHERE mail_faux IS NULL;
Cette requête sélectionne toutes les adresses emails contenues dans les deux tables, grâce à la jointure (ON =)
Mais AUSSI les lignes de t_mail qui ne satisfont pas la condition (LEFT OUTER JOIN), qui n'auront pas de correspondance "mail_faux" dans "mail_faux". "mail faux" sera donc remplacé par NULL.

On filtre ensuite les lignes retournées, on ne prend que celles qui ont NULL, car ce sont les adresses emails qui ne sont pas dans la table mail_faux, donc les bonnes.

Essaie sans mettre la ligne du WHERE d'abord, pour voir ce que ça donne.

par pat » 29 avr. 2008, 14:32

Ma version ne le permet pas

par ouckileou » 29 avr. 2008, 14:20

Ah par "supprimer" tu entendais "supprimé de la liste" ?

Si ta version le permet tu peux passer par une sous-requête :

Code : Tout sélectionner

SELECT t_mail.mail FROM t_mail WHERE t_mail NOT IN (SELECT mail_faux FROM mail_faux)

par caroube » 29 avr. 2008, 14:17

Je ne comprends pas très bien. Ta table s'appelle mail_faux : elle doit donc contenir les mails faux. Pourquoi donc faire une jointure avec la table des mails. Tu fais un simple

Code : Tout sélectionner

select id_mail_faux, mail_faux from mail_faux
Ou alors, il y a une subtilité que je n'ai pas bien compris dans ta demande

par pat » 29 avr. 2008, 14:00

Je veux que les résultat de ma requête me donne que les mail qui fonctionnent. Jet te donne un exemple

mail_faux : toto, tata
mail : toto, tata, titi, tutu

je veux que le résultat de ma requête soit : titi,tutu

par ouckileou » 29 avr. 2008, 13:42

C'est normal c'est un SELECT, pour supprimer c'est DELETE.

Mais c'est mieux de commencer avec un SELECT, histoire de voir les lignes qui seront supprimées ;)
Et ce que tu veux toi en fait ce sont les emails qui sont dans les deux tables, donc :

Code : Tout sélectionner

SELECT DISTINCT t_mail.mail FROM t_mail INNER JOIN mail_faux ON t_mail.mail = mail_faux.mail_faux
Edit : en fait j'ai mal lu, ça ce sera pour obtenir les emails qui ne fonctionnent pas (i.e qui sont dans la 2e table) et pouvoir les supprimer en utilisant DELETE, pas pour obtenir les emails bons. Tu ne pourras pas faire les 2 à la fois.

supprimer des elements d'une liste

par pat » 29 avr. 2008, 13:30

Bonjour,

Je possède une table avec tous mes emails et une table avec des emails qui ne sont plus bon.
Je souhaite faire une requête qui me donne uniquement les mails qui fonctionnent.

J'ai fait la requête suivante

Code : Tout sélectionner

CREATE TABLE `mail_faux` ( `id_mail_faux` int(20) NOT NULL auto_increment, `mail_faux` varchar(100) NOT NULL default '', PRIMARY KEY (`id_mail_faux`) ) TYPE=MyISAM AUTO_INCREMENT=3550 ;

Code : Tout sélectionner

SELECT DISTINCT t_mail.mail FROM t_mail,mail_faux WHERE t_mail.mail <> mail_faux.mail_faux
Le problème est que cette requête ne me supprime pas les mauvais mails