Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1289 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Doublon dans des table mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Doublon dans des table mysql

n°587660
benwar
Posté le 10-12-2003 à 17:51:34  profilanswer
 

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 !  

mood
Publicité
Posté le 10-12-2003 à 17:51:34  profilanswer
 

n°587676
Profil sup​primé
Posté le 10-12-2003 à 18:00:31  answer
 

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

n°587680
benwar
Posté le 10-12-2003 à 18:02:08  profilanswer
 

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 ?

n°587682
gizmo
Posté le 10-12-2003 à 18:02:13  profilanswer
 

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

n°587687
benwar
Posté le 10-12-2003 à 18:03:53  profilanswer
 

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 :(

n°587822
mrbebert
Posté le 10-12-2003 à 20:24:19  profilanswer
 

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

n°588041
blackphant​om
Pfffff...
Posté le 11-12-2003 à 01:51:25  profilanswer
 

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

n°588043
nraynaud
lol
Posté le 11-12-2003 à 02:01:01  profilanswer
 

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
n°588046
Tetedeienc​h
Head Of God
Posté le 11-12-2003 à 06:53:22  profilanswer
 

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
n°588219
blackphant​om
Pfffff...
Posté le 11-12-2003 à 11:29:59  profilanswer
 

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
mood
Publicité
Posté le 11-12-2003 à 11:29:59  profilanswer
 

n°588227
blackphant​om
Pfffff...
Posté le 11-12-2003 à 11:35:46  profilanswer
 

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

n°588278
Tetedeienc​h
Head Of God
Posté le 11-12-2003 à 13:01:35  profilanswer
 

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
n°588382
blackphant​om
Pfffff...
Posté le 11-12-2003 à 15:18:17  profilanswer
 

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

n°588460
Tetedeienc​h
Head Of God
Posté le 11-12-2003 à 16:56:39  profilanswer
 

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
n°588547
nraynaud
lol
Posté le 11-12-2003 à 18:54:36  profilanswer
 

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
n°588828
blackphant​om
Pfffff...
Posté le 12-12-2003 à 00:24:12  profilanswer
 

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...

n°588829
blackphant​om
Pfffff...
Posté le 12-12-2003 à 00:32:22  profilanswer
 

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...

n°588830
mrbebert
Posté le 12-12-2003 à 00:39:27  profilanswer
 

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

n°589066
Tetedeienc​h
Head Of God
Posté le 12-12-2003 à 12:47:04  profilanswer
 

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

n°589110
gizmo
Posté le 12-12-2003 à 14:07:40  profilanswer
 

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...

n°589575
blackphant​om
Pfffff...
Posté le 12-12-2003 à 20:50:06  profilanswer
 

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:

n°590525
Tetedeienc​h
Head Of God
Posté le 14-12-2003 à 17:21:53  profilanswer
 

vous me faites douter du coup O_o

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Doublon dans des table mysql

 

Sujets relatifs
Comment recréer les grant tables MySQL Windows ?requete en mysql a trier
requete MySql par tranches...Recherche de doublon ORACLE?
[SGBD][Mysql] Trouver des cles inexistantes[PHP/MySQL] Prob de récup du résultat d'une requete
putainde clefs etrangeres en mysql[PostgreSQL] phpPgAdmin, probleme de creation de table o_O
[ASP.NET] connexion à mySQL qui échouePassage MySql à fichier SYLK (compatible excel) et inverse (PHP)
Plus de sujets relatifs à : Doublon dans des table mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR