Back to top

Autore Topic: Query cache  (Letto 1803 volte)

mau_develop

  • Visitatore
Query cache
« il: 06 Ago 2011, 21:02:18 »
come si può fare con il framework a gestire update e aggiornamento di due tabelle?
Una contiene le parti principali di un documento (es una bolla, una fattura, un ordine) mentre l'altra tabella usa come chiave l'id del documento inserito.

E' ovvio che, nel caso di inserimento dati, se fallisce la seconda query e la prima no mi trovo in una situazione abbastanza complessa da gestire.

Esiste un modo di mettere la query in una specie di cache o altrimenti altri suggerimenti?

M.

pS il modo che uso adesso è un po' curdo... se fallisce la prima... non c'è problema perchè rientro nel form senza che nel db sia successo nulla, se fallisce la seconda query ... ho l'id (last_insert) che devo usare come chiave che passo, sul fallimento, al metodo delete() , andando a cancellare le righe appena scritte.

mau_develop

  • Visitatore
Re:Query cache
« Risposta #1 il: 07 Ago 2011, 15:50:53 »
Ommadonnamia! la risposta parziale l'ho trovata e direttamente da una spiegazione di Amy...
http://groups.google.com/group/joomla-dev-cms/browse_thread/thread/81585956406f807b

... perfettamente d'accordo che questa è la miglior soluzione per l'mvc mi sembra un attimino "costosa" in termini di codice implementato... e comunque non mi sembra risponda al mio problema finale... come vincolo l'esecuzione della prima query solo alla riuscita della seconda contando che dalla prima devo recuperare l'id chiave per la seconda?

Ma anche supponendo di non aver bisogno dell'id del primo inserimento in quanto i dati inseriti contengono un'altro dato unico che posso usare come chiave per la seconda e quindi eseguirla temporalmente prima della prima query... mi ritrovo comunque allo stesso punto... e se poi fallisce la query? ...le altre righe sono orfane?

Cioè ho pensato anche ad una possibile soluzione, ovvero il ritorno al form di inserimento per farti reinserire i dati errati o mancanti o non necessariamente, potrebbe fallire la query anche per un casuale errore del db....
ho comunque la possibilità di chiudere il browser o pasticciare con i tasti e non reinserire nessun dato.... avrei comunque lasciato degli orfani....

omg! ... ma perchè in agosto questi problemi! :)

M.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Query cache
« Risposta #2 il: 07 Ago 2011, 17:37:11 »
ciao maurizio,
 usa il metodo 'curdo' (?) che il migliore.
l'aderenza all'mcv mi pare vada più a scapito della leggibilità e della facilità di manutenzione del codice, elementi che, a mio parere, valgono molto più di una presunta e pretesa purezza stilistica.

nel caso dello mvc di joomla la risposta corretta sarebbe: non lo abbiamo implementato quindi arrangiatevi.

nel caso di innodb si potrebbero di usare le transaction, ma queste non sono supportate in myisam, sul quale l'uso di una stored procedure potrebbe essere una alternativa percorribile.


ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

mau_develop

  • Visitatore
Re:Query cache
« Risposta #3 il: 07 Ago 2011, 18:02:28 »
 usa il metodo 'curdo' (?)
-----------------------------
..era un'espressione usata da un mio collega quando vedeva "soluzioni" strane che non rispondevano a nessun dogma di programmazione :) ...un po' come quick & dirty ... sosteneva che i curdi fanno le stesse cose che fanno tutti ma sempre in modo strano... questa l'ho presa per buona...mai avuto a che fare...

l'aderenza all'mcv mi pare vada più a scapito della leggibilità e della facilità di manutenzione del codice, elementi che, a mio parere, valgono molto più di una presunta e pretesa purezza stilistica.
-----------------------------------
..ciò che dicevo....

nel caso dello mvc di joomla la risposta corretta sarebbe: non lo abbiamo implementato quindi arrangiatevi.
------------------------------------
avrei detto anche questo, ma mi sto lamentando un po' troppo ultimamente :)

....sul quale l'uso di una stored procedure potrebbe essere una alternativa percorribile.
---------------------------------------
...ecco cosa intendevo...avevo letto qualcosa solo che non ricordavo, ora vedo se è il caso, altrimenti... w i curdi!

molte grazie,... per la serata sono a posto!

M.

Offline dazo

  • Esploratore
  • **
  • Post: 169
    • Mostra profilo
Re:Query cache
« Risposta #4 il: 07 Ago 2011, 18:04:56 »

Forse qui cado in ignoranza completa, ma non puoi fare semplicemente 2 query di inserimento brutali?


Codice: [Seleziona]
$db =& JFactory::getDbo;
$db->setQuery("INSERT bla bla");
$db->query();
$newId = $db->insertid();
if ($newId >0 ) {
  // secondo inserimento
} else {
   //gestione dell'errore
}




Secondo me puoi anche mantenere l'aderenza all'mvc non c'entra nulla... usi delle classi invece che altre non userai JTable, però basta che questo lo gestisce il model e stai continuando ad usare il pattern scelto...  le classi di Joomla secondo me servono per darti una mano, non per complicarsi la vita... però forse come ho detto all'inizio mi sta sfuggendo qualche cosa di importante ...
Web Agency Roma
Web designer Seo

mau_develop

  • Visitatore
Re:Query cache
« Risposta #5 il: 07 Ago 2011, 20:04:00 »
... mi sa che ti sei perso qs...

la prima risposta te la da personalmente la "Signora Joomla" se segui il link.
Quando sviluppo cerco di seguire prima le best practices, poi visto che non sono un genio, ..accetto anche vie traverse.

Ma il problema è il secondo, che in effetti le stored procedure risolvono ma è un po' complicato usarle così ..di botta,non conoscendole, inoltre ho il dubbio che anche il Server MySql deve permettere "molte cose" che non è così scontato permetta...

Ommadonnamia! la risposta parziale l'ho trovata e direttamente da una spiegazione di Amy...
http://groups.google.com/group/joomla-dev-cms/browse_thread/thread/81585956406f807b

... perfettamente d'accordo che questa è la miglior soluzione per l'mvc mi sembra un attimino "costosa" in termini di codice implementato... e comunque non mi sembra risponda al mio problema finale... come vincolo l'esecuzione della prima query solo alla riuscita della seconda contando che dalla prima devo recuperare l'id chiave per la seconda?

Ma anche supponendo di non aver bisogno dell'id del primo inserimento in quanto i dati inseriti contengono un'altro dato unico che posso usare come chiave per la seconda e quindi eseguirla temporalmente prima della prima query... mi ritrovo comunque allo stesso punto... e se poi fallisce la query? ...le altre righe sono orfane?

Cioè ho pensato anche ad una possibile soluzione, ovvero il ritorno al form di inserimento per farti reinserire i dati errati o mancanti o non necessariamente, potrebbe fallire la query anche per un casuale errore del db....
ho comunque la possibilità di chiudere il browser o pasticciare con i tasti e non reinserire nessun dato.... avrei comunque lasciato degli orfani....

omg! ... ma perchè in agosto questi problemi! :)

M.

[EDIT] ...lunga notte ... tanti caffè... occhi crepati...  tanta confusione...
Se cercate Joomla stored procedure scoprirete che non è una pratica così rara, anzi, per un motivo o per l'altro sono una soluzione cercata da molti.
Ebbene mi sono letto praticamente tutti i post su j.org ... quasi tutti senza soluzione o peggio con rimbalzi inspiegabili e chiusure di post... almeno ho capito come si fa o come si tenta di fare :)
« Ultima modifica: 08 Ago 2011, 08:29:51 da mau_develop »

Offline tampe125

  • Appassionato
  • ***
  • Post: 366
    • Mostra profilo
Re:Query cache
« Risposta #6 il: 19 Ago 2011, 14:42:05 »
non so se è il tuo caso, ma a me è capitato di dover salvare un form padre-figli in un colpo solo.
alla fine ci sono riuscito creandomi una funzione apposta, se è quello che cerchi te la posto qua sotto

EDIT: non ti conviene chiamare un model da dentro un altro model? io ci sono riuscito facendo un po' di lacchezzi (l'equivalente del tuo curdo :P) però funziona senza problemi :)
« Ultima modifica: 19 Ago 2011, 14:44:40 da tampe125 »
www.fabbricabinaria.it
Soluzioni originali ad esigenze quotidiane

 



Web Design Bolzano Kreatif