Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208

    Trigger? o operazioni matematiche sempre via php?

    Salve a tutti,
    il mio quesito è più una domanda "filosofica" che tecnica, vi sto per chiedere di condividere un'esperienza per impostare meglio il mio lavoro da qui in avanti.

    Ho 3 tabelle di db con dentro una serie di importi numerici legati ad un id utente su altra tabella. Su queste compio un'operazione di somma e sottrazione su una query SUM() preimpostata, e mostro il totale a video. Si tratta sempre della stessa operazione.

    Ho scoperto che è possibile ottenere un risultato simile impostando dei trigger sul db e chiaramente creando un campo ad hoc in una tabella per ospitare il risultato finale. Mi chiedevo se questa seconda soluzione fosse migliore del ricalcolare il totale ad ogni singolo clic. La mia impressione è che forse con il trigger si risparmia un passaggio di php, ma che allo stesso tempo si possa incorrere in errori e comportamenti imprevisti che, se finiscono nel db sotto forma di dato sbagliato, comportano un casino difficilmente riparabile.

    Voi (se vi è capitato) come gestite casi simili?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Nessuno ha una risposta a riguardo?

    Vorrei giusto capire se secondo voi mi conviene annidare una somma in una query o se mediamente la cosa più giusta è lasciar fare questo lavoro ad un eventuale trigger...

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    I trigger si usano se a fronte di un'operazione eseguita sul db, questo deve "reagire" sempre e sempre allo stesso modo all'operazione avvenuta.
    Tra i vantaggi di questo sistema c'è il fatto che se devi eseguire l'operazione che determina tale reazione in molte parti del sito, non devi ricordarti ogni volta di chiamare la funzione php che eseguirà l'ulteriore manipolazione dei dati. Così se un doani dovessi aggiungere tale operazione in un altra parte del sito, il trigger sarà già lì pronto.

    Per quanto riguarda i comportamenti inattesi, basta scrivere bene il trigger, così come dovresti stare attento a scrivere bene la funzione PHP equivalente, quindi da questo punto di vista non ci sono differenze.

    Gestire una funzione PHP probabilmente è più comodo, ma il modo corretto di procedere sarebbe utilizzando il trigger.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Bene, quindi come immaginavo ho completamente mancato questa funzionalità in fase di progettazione. E' esperienza anche questa comunque. Me ne sono reso conto solo ora che scrivendo la ricerca a campi multipli purtroppo, non c'è una select corrispondente da utilizzare liscia dal value html al db e dunque mi sono reso conto che l'eventuale query per selezionare valori maggiori di tot diventava parecchio complessa.

    Adesso devo capire se mi conviene rigirare il sistema o se per il momento piegarmi ad una query di questo tipo e modificare l'infrastruttura in un secondo momento passando per un trigger. Purtroppo non ho proprio previsto un campo "totale" in nessuna tabella, e peraltro c'è una cosa che mi sfugge da sempre: posso lavorare su un singolo campo di una tabella o sono costretto a lavorare il dato dell'intera tabella quando li inserisco? Perchè se posso, in realtà mi viene facile aggiungere un solo campo sulla tabella main senza stravolgere troppo tutto.

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Quote Originariamente inviata da Korenaar Visualizza il messaggio
    ... posso lavorare su un singolo campo di una tabella o sono costretto a lavorare il dato dell'intera tabella quando li inserisco? Perchè se posso, in realtà mi viene facile aggiungere un solo campo sulla tabella main senza stravolgere troppo tutto.
    Non ho capito cosa intendi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Intendo dire, se io ho un form con X campi, e da qualche parte voglio lavorarne uno solo (che sia un edit o che sia un insert vero e proprio) ho modo di farlo o incorro in qualche errore? Ti chiedo questa cosa perchè questo famoso campo "totale" starebbe alla grande nella tabella main, solo che su questa tabella ho già impostato un mega-form e relativa query d'inserimento. Se posso aggiungere questo campo da solo con il trigger che me lo lavora e come ultimo campo (senza quindi andare a toccare la insert già scritta per quella tabella), probabilmente posso risolvere tutto al banale prezzo della scrittura del trigger stesso senza capovolgere tutto.
    Ultima modifica di Korenaar; 28-05-2014 a 16:13

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Grazie come al solito Alhazred per la tua infinita disponibilità e pazienza, devo finire di costruire tecnicamente la modifica ma ho tutti i pezzi a disposizione.

    1) ho aggiunto il campo alla tabella main, per evitare errori ho dovuto aggiungerlo come readonly vuoto sul form d'inserimento (ma mi fa gioco graficamente perchè rimane coerente con la visualizzazione successiva a campi pieni) e chiaramente ho aggiornato un minimo la query

    2) ho sviluppato una bella nested query che fa update solo su quel singolo campo Totale nuovo di zecca prendendo i sum dai campi delle 3 tabelle necessarie, e usando un DISTINCT poichè mi dava un totale giusto sparato per x volte.
    3) devo scrivere ora la function che lanci questa query e devo legarla come seconda operazione ad ogni inserimento e/o modifica di eventuali importi. Credo abbastanza facile questo passaggio.

    Non è tecnicamente quello che hai consigliato, ma se ben ricordi è qualche mese che rispondi ai miei quesiti, e passo passo sono arrivato qui. Preferisco per ora non aprire questa frontiera nuova.

    Grazie grazie grazie

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.