Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    MySQL: riconoscere inversione record

    Salve

    Ho la necessita di interrogare saltuariamente un archivio MySQL e preferirei utilizzare, se possibile una query, con phpMyAdmin.

    Se con una query risolvo il problema eviterei di scrivere uno script o modificare il programma... come dicevo l'interrogazione è saltuaria.

    In pratica ho una serie di record univoci:

    - codice progressivo (automatico)
    - data inserimento
    - settore
    - reparto

    se il record viene modificato la data inserimento viene sostituita con la data odierna.

    Se dovessi sviluppare un programmino ordinerei i record per data e codice e con un ciclo segnalerei quelli che si presentano con un codice inferiore rispetto a quello del record precedente.

    Es.

    0001 01-05-2015 SET01 REP01
    0002 01-05-2015 SET02 REP02
    0003 01-05-2015 SET01 REP02
    0004 02-05-2015 SET01 REP01
    0005 02-05-2015 SET02 REP02
    0006 02-05-2015 SET01 REP02
    0007 03-05-2015 SET01 REP01
    0008 03-05-2015 SET02 REP02
    0009 03-05-2015 SET01 REP02

    modificando oggi il primo record la situazione diventa

    0001 23-05-2015 SET01 REP01
    0002 01-05-2015 SET02 REP02
    0003 01-05-2015 SET01 REP02
    0004 02-05-2015 SET01 REP01
    0005 02-05-2015 SET02 REP02
    0006 02-05-2015 SET01 REP02
    0007 03-05-2015 SET01 REP01
    0008 03-05-2015 SET02 REP02
    0009 03-05-2015 SET01 REP02

    E' possibile con una query isolare i record modificati.

    Grazie per eventuali suggerimenti

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Ci sono dei problemi a livello di logica ......

    Vedo che le date possono essere duplicate e non hanno la parte oraria .....

    _________________

    Immaginiamo che il 02-05-2015 generi nella mattinata 3 record
    0004 02-05-2015 SET01 REP01
    0005 02-05-2015 SET02 REP02
    0006 02-05-2015 SET01 REP02

    Nel pomeriggio modifichi il record con codice 0005

    Come fai a riconoscere la modifica considerato che la data viene sovrascritta identicamente ????

    ___ oppure _______________________

    Immaginiamo che il tuo ultimo record è
    0009 03-05-2015 SET01 REP02
    oggi che è il 24-05-2015 lo modifichi e diventa
    0009 24-05-2015 SET01 REP02

    La cadenza delle date continua a rispettare la cadenza dei codici pertanto ........

    __________________________________

    a parer mio dovresti avere nel DB 2 campi distinti
    data di inserimento ----- che non viene MAI modificata
    data di ultima modifica ---- che viene valorizzata solo alla modifica

    ____________________________________________

    fatte queste premesse considerato che ci dici che
    la tua query è saltuaria e che non vorresti mettere
    mani al DB allora prova ad adattare questa
    alla sintassi di MySql ( che io non mastico bene )

    codice:
    SELECT 
    T1.codice, 
    T1.data, 
    T1.settore, 
    T1.reparto, 
          (
          SELECT 
          T2.data 
          FROM 
          Tabella AS T2 
          WHERE 
          T2.codice = 
                (
                SELECT 
                Min(T3.codice) 
                FROM Tabella AS T3 
                WHERE 
                T3.codice > T1.codice
                )
          ) AS DataConPrimoCodiceMaggiore, 
    IIf([data]>[DataConPrimoCodiceMaggiore],"xx","") AS RecordModificati
    FROM 
    Tabella AS T1
    ;
    Facci sapere
    Ultima modifica di nman; 24-05-2015 a 08:46

  3. #3
    Quote Originariamente inviata da nman Visualizza il messaggio
    Facci sapere
    Ciao e grazie per il suggerimento che... al momento non sono ancora riuscito a far funzionare,

    confido ancora nella vs. pazienza per mettere a punto gli ultimi dettagli.

    Per le prove ho rimosso settore e reparto (al momento non servono), ho modificato IIF in IF e rimosso le parentese [ e ] perchè segnalati come errori di sintassi (validi probabilmente per Access).

    codice:
    SELECT 
    T1.codice, 
    T1.data, 
          (
          SELECT 
          T2.data 
          FROM 
          Tabella AS T2 
          WHERE 
          T2.codice = 
                (
                SELECT 
                Min(T3.codice) 
                FROM Tabella AS T3 
                WHERE 
                T3.codice > T1.codice
                )
          ) AS DataConPrimoCodiceMaggiore, 
    IF(data>DataConPrimoCodiceMaggiore,"xx","") AS RecordModificati
    FROM Tabella AS T1

    Nonostante questo segnala ancora

    Unknown column 'DataConPrimoCodiceMaggiore' in 'field list'

    sembra non accetti nella IF il campo alias appena dichiarato.



    Completo con alcune informazioni, non dettagliate in precedenza, che hanno giustamente sollevato dubbi del tipo
    Ci sono dei problemi a livello di logica...

    Vedo che le date possono essere duplicate e non hanno la parte oraria
    di questi record posso averne da 70 a 120 giornalieri, la data rappresenta l'inizio ciclo del modulo che ha durata 10 giorni, i moduli vengono eliminati automaticamente quando

    data odierna - data modulo > 10

    quindi posso ritrovarmi i moduli degli ultimi 10 giorni in numero variabile da 700 a 1200 circa.

    Successivamente è stata data la possibilità a chi ne facesse richiesta, alcuni giorni prima della scadenza, di estendere la persistenza del modulo di altri 10 giorni (bonus).
    La sostituzione della data del primo inserimento (che non interessa) con la data della richiesta (che può essere fatta più volte) non altera il meccanismo di durata del 10 giorni del modulo.

    Nel pomeriggio modifichi il record con codice 0005
    Non può succedere, la richiesta può essere fatta alcuni giorni prima della data di scadenza


    A questo punto mi ritrovo con i nuovi moduli degli ultimi 10 giorni in numero variabile da 700 a 1200 circa, più tutti i precedenti che hanno utilizzato il Bonus (una o più volte).

    Ultima necessità è l'aggiornamento di alcune condizioni dei settori/reparti, variazioni valide solo per le prime iscrizioni, scopo della query è scoprire se esistono o meno richieste di bonus.

    Al momento una query come quella suggerita risolverebbe il problema.
    Non ci sono risultati -> aggiorniamo
    Ci sono risultati > 30 -> rimandiamo gli aggiornamenti
    Ci sono risultati <= 30 -> valutiamo

    Gli esempi allegati servono a far capire il meccanismo:
    in data 23/05/15 i moduli del 01/05/15 erano già stati cancellati a patto che non avessero richiesto il bonus (nel qual caso avrebbero riportata altra data) .

    E' chiaro che conoscendo a priori gli sviluppi (bonus e variazioni delle caratteristiche settori/reparti) qualcosa di diverso, da parte ns., si sarebbe potuto fare.

  4. #4
    qual è il fine ultimo della query? capire chi ha già usufruito del bonus?

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    qual è il fine ultimo della query? capire chi ha già usufruito del bonus?
    No, i moduli non sono nominativi

    sapere se posso cambiare le caratteristiche dei settori e reparti (articoli), se non ci sono bonus posso farlo se ci sono no

  6. #6
    ok, non quale persona ma quale reparto, il ragionamento non cambia. quindi il fine ultimo è capire se un dato reparto o settore ha un bonus in corso?

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    ok, non quale persona ma quale reparto, il ragionamento non cambia. quindi il fine ultimo è capire se un dato reparto o settore ha un bonus in corso?
    Più che capire quale è se esistono moduli, quindi nè la persona nè il settore o il reparto, prorogati.

    Se una persona apre un modulo e lo utilizza una volta sola, come dovrebbe, non ci sono problemi... il modulo dopo 10 giorni cessa nel frattempo posso fare aggiornamenti sugli articoli.

    Se ci sono modulo ripresi (bonus) devo evitare gli aggiornamenti sugli articoli perchè tali moduli risulterebbero disallineati.

  8. #8
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da vitren54 Visualizza il messaggio
    ...... Al momento una query come quella suggerita risolverebbe il problema. ......
    Bene.... non h seguito i motivi ..... ma lo prendo per buono




    Quote Originariamente inviata da vitren54 Visualizza il messaggio
    ...... Unknown column 'DataConPrimoCodiceMaggiore' in 'field list'
    sembra non accetti nella IF il campo alias appena dichiarato. ......
    Perché con MySql non puoi usare l'allias appena creato nella stessa vista.

    devi sostituire l'allias con tutta la sua espressione al gran completo

    pero tieni presente che qiel campo
    <cit> IF(data>DataConPrimoCodiceMaggiore,"xx","") AS RecordModificati </cit>
    se ti da fastidio lo puoi tranquillamente eliminare, io lo avevo messo solo per
    evidenziare immediatamente con una "xx" i record modificati


    ci vorrebbe un MySqllaro per metterla a punto.

    oppure prova a mandarci il CREATE TABLE della tabella che magari ......

  9. #9
    Quote Originariamente inviata da vitren54 Visualizza il messaggio
    Più che capire quale è se esistono moduli, quindi nè la persona nè il settore o il reparto, prorogati.

    Se una persona apre un modulo e lo utilizza una volta sola, come dovrebbe, non ci sono problemi... il modulo dopo 10 giorni cessa nel frattempo posso fare aggiornamenti sugli articoli.

    Se ci sono modulo ripresi (bonus) devo evitare gli aggiornamenti sugli articoli perchè tali moduli risulterebbero disallineati.
    basterebbe aggiungere una colonna Booleana (Prorogato si/no) e interrogare quella...

  10. #10
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da optime Visualizza il messaggio
    basterebbe aggiungere una colonna Booleana (Prorogato si/no) e interrogare quella...
    Concordo, sarebbe indubbiamente molto meglio,
    magari addirettura un campo specifico per la "DataUltimaModifica"

    ma dal suo primo post sembra che preferisce non toccare il DB

    .
    Ultima modifica di nman; 25-05-2015 a 15:07

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.