|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2001
Messaggi: 438
|
[SQLite] è possibile creare un trigger che...
Ciao
Vorrei creare un trigger che riordini parzialmente i valori della colonna "n" (solo se necessario incrementandoli di 1) per evitare duplicati nella colonna "n" in caso di aggiornamento o nuovo inserimento ipotizzando una tabella con due colonne come questa k = integer primary key n = integer k n -------- 1 1 2 2 3 3 4 4 5 5 6 6 7 7 9 9 inviando questa questa query UPDATE tabella SET n=5 WHERE k=4 poi in trigger dovrebbe modificarla cosi k n -------- 1 1 2 2 3 3 4 5 <---------update 5 6 <---------trigger n+1 6 7 <---------trigger n+1 7 8 <---------trigger n+1 9 9 Sperando di essere stato chiaro, grazie per gli eventuali consigli ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Vedi un po' come va... http://sqlfiddle.com/#!7/f7204/1
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2001
Messaggi: 438
|
Ciao
Cosa rappresenta la "t" presente nel trigger? Codice:
SELECT 1 FROM tabella t ... -------------------- ho riscontrato questo inconveniente... http://sqlfiddle.com/#!7/f7204/8 Codice PHP:
e questo … http://sqlfiddle.com/#!7/f7204/18 Codice PHP:
grazie bye bye ![]()
__________________
Ultima modifica di asghan : 31-10-2014 alle 12:51. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quando si fanno delle query nidificate che coinvolgono una stessa tabella può essere necessario fare riferimento ai record provenienti dall'una o dall'altra query, per questo bisogna assegnare alla tabella un alias univoco.
In quel caso ho deciso di chiamare la tabella t, ma poteva andar bene un qualunque altro nome. Ci ragiono un po' e ti faccio sapere. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Fosse MySQL sarebbe stato facile, SQLite è molto carente sulle procedure, forse si potrebbe arrangiare qualcosa con dei trigger ricorsivi, ma andrebbe bene solo per tabelle molto molto piccole a causa del limite di ricorsione, e comunque non ho modo di provarlo (sembra che SQL fiddle non consenta l'attivazione dei trigger ricorsivi). Penso che dovrai implementare l'operazione nella tua applicazione oppure passare ad un db più potente.
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2001
Messaggi: 438
|
grazie
puntroppo non posso cambiare db ![]() proverò a trovare una soluzione riducendo al minimo le query ciao ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:24.