[gl-como] Query MySql/Php

Carlo Filippetto carlo.target@tiscali.it
Ven 16 Feb 2007 10:36:47 CET


Tempo..
io non devo avere e non ho IN = OUT
questi due campi sono sempre diversi tra loro!

Quello che devo eliminare č l'uguaglianza IN con IN unito ad OUT con OUT
fra righe successive sullo stesso cod_id
devo avere un DISTINCT (cod_id, in, out)

CIAO



Il giorno ven, 16-02-2007 alle 10:29 +0100, Diego Zanga ha scritto:
> Il 16/02/07, Carlo Filippetto<carlo.target@tiscali.it> ha scritto:
> > Alla fine lo farņ col php..
> > query normale in cui estraggo tutti i cod_id
> > poi li elaboro tirando fiori tutti i valori e li confronto, se ci sono
> > doppioni elimino!!
> >
> > Fine
> >
> > Cmq quello che non avevo capito della tua query era:
> > creare un "id" al volo -> cod_id + "_" + date + in + out
> 
> ok, riproviamo cosi' allora :-) :
> 
> se fai
> select concat( cod_id, date, in, out) from XXXXX
> hai l'elenco completo dei dati della tabella, espressi
> in un'altra forma, che pero' supporta il comando DISTINCT
> quindi,
> 
> select distinct concat( cod_id, date, in, out) from XXXXX
> cosi' ora ottieni i dati secondo il criterio di IN=OUT per
> date e cod_id uguale, una sola volta (ottieni anche i
> dati dove IN <> OUT, gli unici che perdi sono i doppioni
> in cui IN = OUT)
> 
> select distinct concat( cod_id, '_',date,'_', in,'_', out) from XXXXX
> con questa select i record che ottieni sono qualcosa tipo
> 1_23/12/2007_900_900
> 2_13/1/2007_10_9
> 2_13/1/2007_1_1
> 
> da questo testo puoi individuare il valore di cod_id,
> data, in ed out, la via per cancellarei doppioni e'
> ancora lunga da qui :-/ anche perche' dovresti
> invece di cancellare i doppioni, creare una nuova
> tabella con i soli record che rispettano i tuoi criteri
> a partire da questa select
> 
> In sostanza, partendo da una select ci vuole una
> vita per avere un'archivio che rispetti i criteri che
> avevi indicato: sarebbe meglio usare un trigger,
> che controlli ogni singolo record all'inserimento
> verificando che non sia un "doppione" per cod_id
> e data uguale, con IN=OUT
> 
> una cosa tipo
> 
> CREATE TRIGGER non_duplicare AFTER INSERT ON XXXX
>     -> FOR EACH ROW
> BEGIN
>    IF (SELECT count() FROM inserted WHERE concat( new.cod_id,
> new.date, new.in, new.out) like concat( cod_id, date, in, out) and
> in=out ) > 1
>      ROLLBACK
> END
> 
> Questo trigger credo sia l'unico mezzo per avere il
> database sempre "pulito" senza troppo sforzo.
> 
> 
> 
> cya
> -- 
> Diego Zanga
> ------------------------------
> http://www.eLawOffice.it
> http://www.blogstudiolegale.eu
> http://www.javablog.eu
> Skype NAARANI
> 
-- 
Filippetto Carlo
Linux User #404000



Maggiori informazioni sulla lista gl-como