Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    MySQL: confronto dei record della query

    Ciao a tutti,
    ho un database che registra gli ingressi e le uscite di alcune persone (tipo timbratura collaboratori).

    ho fatto una query con una join tra 2 tabelle che mi restituisce dei risultati ordinati per data e filtrati per la data odierna.

    Tra questi risultati (nome delle colonne sono: "Id", "Nome", "Foto", "Timestamp", "Tipo") posso avere nella stessa giornata piu ingressi e piu uscite per lo stesso utente (ovviamente ad un record di ingresso corrispondera un record di uscita).

    Esiste qualche funzione mysql per filtrare ulteriormente questi valori e fare in modo che posso visualizzare solo gli utenti che non hanno effettuato l'uscita? (altrimenti devo fare qualcosa con PHP)

    grazie 1000 in anticipo!

  2. #2
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    si può fare: il modo più semplice è brutalmente contare entrate ed uscite e confrontarle.
    Ovviamente questo non dà certezza per situazioni più complesse.

    Personalmente in questo caso preferisco da programma avere proprio due campi nello stesso record (entrata ed uscita), piuttosto che ricostruire i (mille) casi possibili

  3. #3
    fai una count() per tipo, ed evidenzi quelli con tipo=IN > di quelli con tipo=OUT

  4. #4
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da optime Visualizza il messaggio
    fai una count() per tipo, ed evidenzi quelli con tipo=IN > di quelli con tipo=OUT
    OK, ma in teoria (ed in pratica) se non hai un orologio unico (cioè ad esempio non usi una funzione del tipo NOW del database, invece di mettere il NOW del computer, trucchetto da tenere presente) puoi trovare IN e OUT fuori ordine se si spostano tra vari computer

  5. #5
    IN e OUT li ricavi dal tipo, non dall'orario. e spero proprio che gli orari vengano generati in maniera univoca (tra l'altro credo che usare il NOW() del client comporti uno sforzo di programmazione maggiore...)

  6. #6
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da optime Visualizza il messaggio
    IN e OUT li ricavi dal tipo, non dall'orario. e spero proprio che gli orari vengano generati in maniera univoca (tra l'altro credo che usare il NOW() del client comporti uno sforzo di programmazione maggiore...)
    IN e OUT non sono così banali da gestire, se non forzi dall'applicazione un controllo preventivo di coerenza (che significa in pratica che puoi benissimo evitarte tutta la fatica di fare controlli expost, mettendoli prima), altrimenti nulla impedisce di trovarti ad esempio due IN e nessun OUT, o magari
    IN, IN, IN, OUT, IN, IN, IN, OUT e così via.
    Fare un triggerone che controlla l'immissione non ha molto senso (perchè deve tornare il risultato all'applicazione).
    Risultato netto: più è "intelligente" la registrazione (quindi l'applicazione), meno è rognoso dover ricostruire una situazione che deve essere la più sicura possibile (per evitare errori).
    Dopo aver sbattuto la testa, un bel po', con sistemi fatti così (cioè a righe distinte) ora preferisco di gran lunga quelli con record singolo (IN e OUT nei campi). L'applicazione fa qualche controllo prima (pochi), a in uscita e rendicontazione la vita è molto più semplice

  7. #7
    MySQL, non ho capito perché fai a me questo pistolotto. l'applicazione non è mia, ma di Paraflu10Synt che spero sappia fare buon uso delle tue raccomandazioni

  8. #8
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Scusatemi se ci metto anch'io il mio beccaccio

    ma dopo anni di controllo registrazioni ......

    il problema di base è che l'utente è distratto ( si dice occupato da altre cose più importanti )

    quindi
    - dimentica di registrarsi
    - nell'incertezza di essersi già registraro piuttosto si RIregistra
    - si registra con IN al posto di OUT o viceversa
    - eccetera

    è sempre comunque un casino .....

    Io non ho risolto tutti i problemi ma li ho drasticamente ridotti in questo modo:
    - IN e OUT anche se mi vengono dati dai registratori non li "cago" più
    - considero IN la minima registrazione della giornata
    - considero OUT la massima registrazione della giornata
    - non mi interesso di quante registrazioni vengano fatte nella giornata

    poi metto tutto in tabella con 3 campi
    - IdUtente
    - DataOraIN
    - DataOraOUT


    però il caso di paraflu10sint è più complesso perché ha più registrazioni nella stessa giornata ......

  9. #9
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da nman Visualizza il messaggio
    Scusatemi se ci metto anch'io il mio beccaccio
    ma dopo anni di controllo registrazioni ......
    però il caso di paraflu10sint è più complesso perché ha più registrazioni nella stessa giornata ......
    Posso dire che ho applicazioni con entrambi gli approcci: righe IN e OUT diverse con superlogica per eliminare quelle spurie e fare dei report corretti; e righe singole.
    La seconda è 100 volte più facile da gestire, almeno per me.


    PS come icona ho messo un frame di Fantozzi che timbra il cartellino

  10. #10
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da optime Visualizza il messaggio
    MySQL, non ho capito perché fai a me questo pistolotto. l'applicazione non è mia, ma di Paraflu10Synt che spero sappia fare buon uso delle tue raccomandazioni
    Ma che pistolotto, è solo per ragionare se un approccio "a riga singola" richieda meno o più impegno.
    Magari trovo qualcuno che si occupa proprio di questi programmi (io più che altro a livello dilettantistico) e può chiarire meglio pattern e antipattern

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.