Utilizzando MySQL a volte sarebbe sarebbe comodo poter integrare un contatore
esempio:
| 1 | 00/00/00
| 2 | 00/01/00
| 3 | 00/01/01
| 4 | 00/02/00
...
Settiamo una variabile, identificata dal carattere @, che chiameremo nr ed inizializzeremo a 0, con il seguente comando
una volta definita la variabile, occorre utilizzare l'operatore di assegnamento :=.
Sulla variabile incrementeremo in valore di una unità (incrementeremo o descrementeremo in base a ciò che serve)
Volendo un progressivo crescente, sommiamo a @nr il valore 1 e poi lo assegnamo alla variabile
NB: nel caso viene eseguita nuovamente la query occorre azzerare la variabile nr, altrimenti verrà incrementata a partire dall'ultimo valore assegnato (nell'esempio, valore 10)
Stessa procedura la possiamo utilizzare in fase di inserimento, combinandolo magari insieme ad altre funzioni
Nell'esempio è stata effettuata una insert nella tabella 1, copiando i dati dalla tabella 2, facendo in modo che l'ID della tabella 1 sia composto dalla concatenazione della variabile più un valore fisso ( es: 134, 234, 334,...).
esempio:
| 1 | 00/00/00
| 2 | 00/01/00
| 3 | 00/01/01
| 4 | 00/02/00
...
Settiamo una variabile, identificata dal carattere @, che chiameremo nr ed inizializzeremo a 0, con il seguente comando
SET @nr=0;
mysql> SET @nr=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @nr=0;
Query OK, 0 rows affected (0.00 sec)
una volta definita la variabile, occorre utilizzare l'operatore di assegnamento :=.
Sulla variabile incrementeremo in valore di una unità (incrementeremo o descrementeremo in base a ciò che serve)
Volendo un progressivo crescente, sommiamo a @nr il valore 1 e poi lo assegnamo alla variabile
select @nr:=@nr+1, dato from tabella;
mysql> select @nr:=@nr+1, codice from tabella limit 10;
+--------------------+--------------+| @nr:=@nr+1 | codice |
+--------------------+--------------+
| 1 | % |
| 2 | 00/01/00 |
| 3 | 00/01/01 |
| 4 | 00/01/02 |
| 5 | 00/02/00 |
| 6 | 00/02/01 |
| 7 | 00/05/00 |
| 8 | 00/14/08 |
| 9 | 00/54/00 |
| 10 | 00/87/00 |
+---------------------+--------------+
10 rows in set (0.00 sec)
mysql> select @nr:=@nr+1, codice from tabella limit 10;
+--------------------+--------------+| @nr:=@nr+1 | codice |
+--------------------+--------------+
| 1 | % |
| 2 | 00/01/00 |
| 3 | 00/01/01 |
| 4 | 00/01/02 |
| 5 | 00/02/00 |
| 6 | 00/02/01 |
| 7 | 00/05/00 |
| 8 | 00/14/08 |
| 9 | 00/54/00 |
| 10 | 00/87/00 |
+---------------------+--------------+
10 rows in set (0.00 sec)
NB: nel caso viene eseguita nuovamente la query occorre azzerare la variabile nr, altrimenti verrà incrementata a partire dall'ultimo valore assegnato (nell'esempio, valore 10)
Stessa procedura la possiamo utilizzare in fase di inserimento, combinandolo magari insieme ad altre funzioni
insert into tabella1(chiave1,id,chiave,valore)
( select '5780276130',concat(@nr:=@nr+1,'34') id, codice,descrizione from tabella2);
( select '5780276130',concat(@nr:=@nr+1,'34') id, codice,descrizione from tabella2);
Nell'esempio è stata effettuata una insert nella tabella 1, copiando i dati dalla tabella 2, facendo in modo che l'ID della tabella 1 sia composto dalla concatenazione della variabile più un valore fisso ( es: 134, 234, 334,...).
Commenti
Posta un commento