Mysql - Aggiungere un contatore (Progressivo) su una select

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

 SET @nr=0; 

 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)

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);

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