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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Suppression de doublons

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Suppression de doublons

n°1680320
vinsang95
Posté le 01-02-2008 à 11:46:44  profilanswer
 

Bonjour,
 
Apres deux jours de recherches je ne trouve pas de solutions à mon probleme.
Systeme debian SGBD Mysql server 5.0.
J'ai donc une table (proxy) avec 3 champs une reférences(auto incrémenté),une adresse url et une adresse ip.
J'ai un script qui va récuperer les adresses url et ip dans le log de squid (/var/log/squid/access.log) et qui les inscrit ensuite dans la tables grace à un load data infile.
Tous sa marche trés bien le probleme est que pour une adresse ip je peut avoir plusieurs fois le meme site visité.
exemple l'adresse 192.168.1.25 peut avoir visité le site http://forum.hardware.fr/ 15 fois or je ne souhaite n'avoir qu'une seul occurence il faut donc en supprimer 14.
 
J'ai trouvé la requete select *,count (*) from proxy group by ref,site,ip having count (*) >1 qui me permet de trouver toutes les occurences en trop.
J'ai egallement crée une procedure stocké avec un curseur.

Citation :


create procedure supdoublon()
begin
declare ipa char (20);
declare ipb char (20);
declare refa int (5);
declare refb int (5);
declare sitea char (100);
declare siteb char (100);
declare cursa cursor for select ref,site,ip from proxy;
declare cursb cursor for select ref,site,ip from proxy;
open cursa;
open cursb;
fetch cursa into refa,sitea,ipa;
while refa <>" " do
  while refb<>" " do
    fetch cursb into refb,siteb,ipb;
    if refa <> refb then
        if ipa=ipa then
            if sitea=siteb then
                 delete from proxy where ref=refb;
            end if;
        end if;
     end if;
   end while
fetch cursa into refa,ipa,sitea;
end while;
close cursa;
close cursb;
end //


 
La procédure marche mais elle ne supprimme pas tous les enregistrements seulement une partie je ne sait pas pourquoi.
Si quelqu'un voit l'erreur ou à une solution alternative pour la suppression des doublons sa serait sympas.
Merci. :hello:

mood
Publicité
Posté le 01-02-2008 à 11:46:44  profilanswer
 

n°1680329
Elmoricq
Modérateur
Posté le 01-02-2008 à 11:51:15  profilanswer
 

select distinct site from proxy ?

n°1680334
vinsang95
Posté le 01-02-2008 à 11:59:17  profilanswer
 

Merci, effectivement sa ne m'affiche qu'une seul fois tous les sites visités mais sa ne les supprime pas....

n°1680337
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-02-2008 à 12:03:45  profilanswer
 

essaye un truc dans le genre

Code :
  1. DELETE FROM proxy p WHERE EXISTS (
  2. SELECT
  3.  min(p2.ref),
  4.  ref,
  5.  site
  6. FROM
  7.  proxy p2
  8. WHERE
  9.        p.ref = p2.ref
  10. AND p.url = p2.url
  11. GROUP BY ref, site
  12. HAVING min(p2.ref)<>p.ref)


note: pas testé, de tête donc gaffe la 1ere fois que tu le lances


Message édité par anapajari le 01-02-2008 à 12:04:33

---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1680339
Elmoricq
Modérateur
Posté le 01-02-2008 à 12:07:05  profilanswer
 

vinsang95 a écrit :

Merci, effectivement sa ne m'affiche qu'une seul fois tous les sites visités mais sa ne les supprime pas....


J'avais pas vu que tu voulais supprimer. :o

n°1680376
MagicBuzz
Posté le 01-02-2008 à 12:54:52  profilanswer
 

une autre solution simple :
 

Code :
  1. DELETE proxy
  2. WHERE id NOT IN (
  3.  SELECT min(id)
  4.  FROM proxy
  5.  GROUP BY ip, url
  6. )

n°1680398
vinsang95
Posté le 01-02-2008 à 13:15:11  profilanswer
 

MagicBuzz a écrit :

une autre solution simple :
 

Code :
  1. DELETE proxy
  2. WHERE id NOT IN (
  3.  SELECT min(id)
  4.  FROM proxy
  5.  GROUP BY ip, url
  6. )



 
Merci c'est une solution que j'avais deja essayée est j'ai une erreur quand je fait sa.

Citation :

ERROR 1093 (HY000) : You can't specify target table 'proxy' for update in FROM clause


 
j'ai pas encore testé l'autre solution je vais essayé ça dans l'aprés midi.
 
Je garde bon espoir .....

n°1680440
MagicBuzz
Posté le 01-02-2008 à 14:12:48  profilanswer
 

vu l'erreur, je crois que tu peux dès maintenant commencer à perdre tout espoir...
 
mysql ne semble pas capable de supprimer des lignes dans une table qu'il est en train de lire à l'aide d'une sous-requête.
 
c'est mysql quoi... ça me surprend pas.

n°1680463
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-02-2008 à 14:33:12  profilanswer
 

tu fais un select des min groupé par ip, proxy que tu insert dans un table (eventuellement temporaire)
tu vide la table proxy et tu le re-remplis avec le contenu de ta table temp


Message édité par anapajari le 01-02-2008 à 14:33:23

---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1680484
vinsang95
Posté le 01-02-2008 à 15:02:46  profilanswer
 

MagicBuzz a écrit :

vu l'erreur, je crois que tu peux dès maintenant commencer à perdre tout espoir...
 
mysql ne semble pas capable de supprimer des lignes dans une table qu'il est en train de lire à l'aide d'une sous-requête.
 
c'est mysql quoi... ça me surprend pas.


 
Non faut pas dire des choses comme sa c'est mon projet de stage pour mon bts...... :cry:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Suppression de doublons

 

Sujets relatifs
Elimination des doublons d'un Select sur 4 tables[resolu] simplexml - suppression d'elements - probleme avec unset?
suppression d'objet d'un arraylistPlantage Apache génère des doublons
suppression d'un repertoireScritp Shell : Ftp + Suppression
[Résolu][MYSQL] lister les doublons + rapidementsuppression automatique de ligne sur excel [vba]
Probleme de parser XML / XSLt - Doublons[SQL] Suppression de doublons
Plus de sujets relatifs à : Suppression de doublons


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