Doublon dans des table mysql

Doublon dans des table mysql - PHP - Programmation

Marsh Posté le 10-12-2003 à 17:51:34    

J'ai une table t_tmp avec un champ email je voudais dans un premier temp supprimer les emails qui son dans la table t_nepasenvoyer puis verifier si dans la table t_email il n'y a pas de doublon avec la table t_temp si oui effacer un exemplaire de chaque doublon dans t_temp puis update sur t_email
 
Je suis completement dans les choux !  

Reply

Marsh Posté le 10-12-2003 à 17:51:34   

Reply

Marsh Posté le 10-12-2003 à 18:00:31    

j'ai absolument rien compris a par doublon [:totoz]
 
enfin bon sinon pour els doublon tu peu toujours faire un while ou faire un count ou l'email est $mail
 
un truc du genre quoi

Reply

Marsh Posté le 10-12-2003 à 18:02:08    

chacal_one333 a écrit :

j'ai absolument rien compris a par doublon [:totoz]
 
enfin bon sinon pour els doublon tu peu toujours faire un while ou faire un count ou l'email est $mail
 
un truc du genre quoi


on peut pas le faire avec mysql y pas une commande pour ca ?

Reply

Marsh Posté le 10-12-2003 à 18:02:13    

vous faites une concours de la plus longue phrase sans ponctuation?

Reply

Marsh Posté le 10-12-2003 à 18:03:53    

gizmo a écrit :

vous faites une concours de la plus longue phrase sans ponctuation?


 
Désolé je ne suis pas tres doué pour ces choses là et pour le reste d'ailleur :(

Reply

Marsh Posté le 10-12-2003 à 20:24:19    

Ca me parait effectivement difficile de faire tout ca avec des requêtes. Je pense qu'un script s'impose [:proy]

Reply

Marsh Posté le 11-12-2003 à 01:51:25    

As tu acces en ssh à ta base de donnée ?
 
Si oui, c'est pas un script qu'il te faut, car, suivant le nombre d'enregistrements que tu as  
dans tes tables, cela pourra te prendre une seconde a des heures (je sais de quoi je te parle,
tres souvent je suis amener a preparer des bases d'envoi de 500 000 lignes :D)
 
 
je voudais dans un premier temp supprimer les emails qui son dans la table t_nepasenvoyer :
Ben pour ca, c facile, tu fais une requete "DELETE"
 
verifier si dans la table t_email il n'y a pas de doublon avec la table t_temp si oui effacer un exemplaire de chaque doublon dans t_temp :
Facile :D
 
Il faut par contre absolument que tes tables soient unique sur l'email.
 
Procédure :
 
Repérer un champ toujours vide dans ta table t_email, si il y en a pas, en créer un (ALTER TABLE t_email etc...)
 
Initialiser ce champ à "OK" par exemple pour toutes les lignes de la table t_temp :
UPDATE t_temp SET champ = "OK";
 
Récupérer les enregistrements de ta table t_email avec le champ à "OK" :
SELECT email, champsAOK FROM t_email INTO OUTFILE 'tonFichier1';
 
Repérer un champ toujours vide dans ta table t_temp, si il y en a pas, en créer un (ALTER TABLE t_temp etc...)
 
 
Charger "tonFichier1" dans ta table t_temp :
LOAD DATA INFILE 'tonFichier1' REPLACE INTO TABLE t_temp (email, champ);
 
Supprimer de cette table tous les email dont le champs "champ" (ou celui que tu avais choisis) est à "OK" :
DELETE FROM t_email WHERE champ = "OK";
 
Reste plus qu'a updater la table t_email avec la table t_temp :
 
SELECT email FROM t_temp INTO OUTFILE 'tonFichier2';
 
LOAD DATA INFILE 'tonFichier2' INTO TABLE t_email (email);
 
A priori, ca devrait le faire, et ca prend pas plus de 15 minutes (remarque cela depend de la taille de tes tables :D)
 
Sinon, tu peux faire un script php en t'inspirant de ce k'il y a au dessus... A toi de voir

Reply

Marsh Posté le 11-12-2003 à 02:01:01    

blackPhantom a écrit :

tres souvent je suis amener a preparer des bases d'envoi de 500 000 lignes

Un enculé de spameur !
c'est toi Corey Griggs alias "Women say yes to SIZE" ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-12-2003 à 06:53:22    

Attendez, une jointure et c'est fini son truc ...
 
Delete from TTemp where email IN ( Select email from t_nepasenvoyer );
 
Delete from TTemp where email IN ( select email from t_email);
 
Insert into temail blablaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
 
Pour le probleme des sous requete, lire la doc Mysql et autres exemples sur le net pour contourner ce genre de sucis.


Message édité par Tetedeiench le 11-12-2003 à 06:54:01
Reply

Marsh Posté le 11-12-2003 à 11:29:59    

nraynaud a écrit :

Un enculé de spameur !
c'est toi Corey Griggs alias "Women say yes to SIZE" ?


 
 :fou:
 
t'es qui pour me traiter de spammeur? Ces envois sont fait sur nos membres qui ont acceptés de recevoir notre newsletter ou sur les bases de nos clients (lastminute, travelprice etc...) et je te conseille de réediter ton message, car e-c-l- ca passe pas trop chez les modos...  :o


Message édité par blackphantom le 11-12-2003 à 11:33:33
Reply

Marsh Posté le 11-12-2003 à 11:29:59   

Reply

Marsh Posté le 11-12-2003 à 11:35:46    

tetedeiench a écrit :

Attendez, une jointure et c'est fini son truc ...
 
Delete from TTemp where email IN ( Select email from t_nepasenvoyer );
 
Delete from TTemp where email IN ( select email from t_email);
 
Insert into temail blablaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
 
Pour le probleme des sous requete, lire la doc Mysql et autres exemples sur le net pour contourner ce genre de sucis.


 
Oui c sur mais si tu as de grosses bases, bonjour l'attente, et les requetes dans les requetes, c pas supporté dans toutes les versions de mySQL

Reply

Marsh Posté le 11-12-2003 à 13:01:35    

blackPhantom a écrit :


 
Oui c sur mais si tu as de grosses bases, bonjour l'attente, et les requetes dans les requetes, c pas supporté dans toutes les versions de mySQL


 
C'est toujours mieux que de rajouter un champ dans ta base :heink: Et donc l'alourdir inutilement :heink:
 
Sans compter l'existence d'index et compagnie... cette opération la est quand même ultra basique.
 
OK je la ferai pas à chaque insertion, mais y a des moyens pour éviter cela assez connus et simples ...
 
De plus, tu peux transformer aisément les jointures avec des opérations LEFT JOIN et compagnie sous MySQL => Goto doc MySQL comme je l'ai dit auparavant.


Message édité par Tetedeiench le 11-12-2003 à 13:02:04
Reply

Marsh Posté le 11-12-2003 à 15:18:17    

A benwar de juger en fonction de la taille de ces bases; on a pas toutes les données en main pour trouver la meilleure soluce je pense

Reply

Marsh Posté le 11-12-2003 à 16:56:39    

blackPhantom a écrit :

A benwar de juger en fonction de la taille de ces bases; on a pas toutes les données en main pour trouver la meilleure soluce je pense


 
Rajouter un champ de booléen pour le traitement dans ta BDD est tout sauf de l'analyse, et est totalement superflu en l'occurence.
 
Ma solution est aussi efficace, surement plus optimisée que la tienne quelque part d'ailleurs ( on se repose sur le SGBD, qui doit connaitre son boulot ), plus légère en terme de base et beaucoup plus élégante niveau méthode ( Merise/co ).
 
Bref, la mienne est meilleure, la tienne alourdit inutilement :p
 
Surtout que passer par un fichier comme tu le fais, je te raconte pas les opérations d'I/O que tu nous fait... moi je les minimise :)


Message édité par Tetedeiench le 11-12-2003 à 16:57:44
Reply

Marsh Posté le 11-12-2003 à 18:54:36    

blackPhantom a écrit :


 
 :fou:
 
t'es qui pour me traiter de spammeur? Ces envois sont fait sur nos membres qui ont acceptés de recevoir notre newsletter ou sur les bases de nos clients (lastminute, travelprice etc...) et je te conseille de réediter ton message, car e-c-l- ca passe pas trop chez les modos...  :o  

monsieur à de l'humour à ce que je vois. Je pense que les modos ont un peu plus d'humour que toi.
 
 
 
(c'est des sites où les formulaires ont la case "evoyez-mois vos conneries" est déjà pré-cochée ?)


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-12-2003 à 00:24:12    

nraynaud a écrit :

monsieur à de l'humour à ce que je vois. Je pense que les modos ont un peu plus d'humour que toi.
 
 
 
(c'est des sites où les formulaires ont la case "evoyez-mois vos conneries" est déjà pré-cochée ?)


 
sans commentaires...

Reply

Marsh Posté le 12-12-2003 à 00:32:22    

tetedeiench a écrit :


 
Rajouter un champ de booléen pour le traitement dans ta BDD est tout sauf de l'analyse, et est totalement superflu en l'occurence.
 
Ma solution est aussi efficace, surement plus optimisée que la tienne quelque part d'ailleurs ( on se repose sur le SGBD, qui doit connaitre son boulot ), plus légère en terme de base et beaucoup plus élégante niveau méthode ( Merise/co ).
 
Bref, la mienne est meilleure, la tienne alourdit inutilement :p
 
Surtout que passer par un fichier comme tu le fais, je te raconte pas les opérations d'I/O que tu nous fait... moi je les minimise :)


 
As tu deja testé un "Delete from table1 where email IN (Select email from table2);" sur 2 tables à 500 000 enregistrements chacune voire plus ?
 
Sais tu si sa version de mySQL accepte les sous requetes?
 
Tant que tu n'as pas ces reponses, je ne vois pas comment tu peux dire que ta soluce est mieux...

Reply

Marsh Posté le 12-12-2003 à 00:39:27    

Avec les dernières versions de mysql, on peut faire des jointures pour déterminer les lignes à effacer. Ca devrait répondre à ton problème :)  
http://www.mysql.com/doc/fr/DELETE.html

Reply

Marsh Posté le 12-12-2003 à 12:47:04    

blackPhantom a écrit :


 
As tu deja testé un "Delete from table1 where email IN (Select email from table2);" sur 2 tables à 500 000 enregistrements chacune voire plus ?
 
Sais tu si sa version de mySQL accepte les sous requetes?
 
Tant que tu n'as pas ces reponses, je ne vois pas comment tu peux dire que ta soluce est mieux...
 


 
On peut TOUJOURS eviter les sous requetes en utilisant les jointures supportees depuis BELLE LURETTE par mysql bon sang...
 
Je t'assure.
 
Et oui je l'ai deja essayé, et c'était pas si mal que ca.
 
Donc bon, RENSEIGNE TOI bon sang :D

Reply

Marsh Posté le 12-12-2003 à 14:07:40    

tetedeiench a écrit :


 
On peut TOUJOURS eviter les sous requetes en utilisant les jointures supportees depuis BELLE LURETTE par mysql bon sang...
 
Je t'assure.
 
Et oui je l'ai deja essayé, et c'était pas si mal que ca.
 
Donc bon, RENSEIGNE TOI bon sang :D


 
Bien puisque tu l'assures, tu vas donc m'expliquer comment on remplace une sous-requètes dans un delete par une jointure...

Reply

Marsh Posté le 12-12-2003 à 20:50:06    

gizmo a écrit :


 
Bien puisque tu l'assures, tu vas donc m'expliquer comment on remplace une sous-requètes dans un delete par une jointure...


 
+1
 
Mais ou est le principal interessé ???  :whistle:

Reply

Marsh Posté le 14-12-2003 à 17:21:53    

vous me faites douter du coup O_o

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed