Algoritmo per la gestione della posizione nella tabella SQL

Ho un piccolo dubbio, come gestire la seguente situazione. In una tabella DB salvi i dati rilevanti in colonne diverse e alla fine salvi l’ordine esatto in una colonna chiamata posizione. Questa tabella è vincasting a una griglia. Ora sto implementando la funzionalità che cambierà la posizione delle righe, ma ho ancora bisogno di aggiornare il DB. Stavo chiedendo qual è la migliore pratica o il modo più conveniente per raggiungere questo objective?

E il suggerimento è benvenuto.

Esempio

Nome posizione

abc 1

def 2

ghj 3

Ora clicco sul pulsante e ottengo il seguente

Nome posizione

def 1

abc 2

ghj 3

Spero di essermi spiegato!

Sulla base dei commenti questo è il vero esempio:

TABELLA1 con 3 colonne ID1, ID2, POSIZIONE
ID1 AND ID2 sono FK e la tabella ha un PK basato su ID1 e ID2
Quando seleziono i dati da visualizzare, utilizzo la seguente query SELECT NAME, ETC FROM TABLE2 INNER JOIN TABLE1 SU ID1 = ID1 WHERE ID2 = 511 ORDER BY POSITION

Ora ho bisogno di cambiare la posizione su due elementi, quindi la riga in TABLE1 ad esempio 311,511,5 deve diventare 311,511,4 e la riga che era 433,511,4 deve diventare 433,511,5. L’opposto.

Spero che ciò abbia contribuito a chiarire la mia domanda.

Saluti!

Quando dici “cambia la posizione delle righe” , intendi spostare le righe su e giù attraverso la tabella (relativamente all’ordinamento delle position )?

In tal caso, per spostare la riga verso l’alto, è necessario scambiare la position con la riga precedente. Per spostarlo verso il basso, è necessario fare lo stesso con la riga successiva. A seconda del tuo particolare dialetto SQL, la syntax per lo scambio di valori da diverse righe sarà probabilmente simile a questa:

 UPDATE YOUR_TABLE SET position = CASE position WHEN 2 THEN 3 WHEN 3 THEN 2 END WHERE position IN (2, 3) 

Questo esempio sposta la riga 3 in alto e la riga 2 in basso. Sostituisci 2 e 3 in base alle tue esigenze …

A proposito, questo dovrebbe funzionare anche se c’è un vincolo UNIQUE sulla position (confermato in Oracle).

Per ulteriori idee, puoi dare un’occhiata a questa domanda .

Vorrei creare una tabella per salvare i risultati, nel mio esempio / soluzione la tabella da salvare si chiama ‘ladders’ e i dati provengono da ‘data’ e sono limitati dalle prime 100 voci. Cancella prima la tabella, quindi imposta la variabile di posizione temporanea su 0 e inizia ad aumentare / inserire.

 "TRUNCATE `ladders`";SET @pos:=0; INSERT INTO `ladders` ( `identifier`,`pos`,`score`)" " SELECT `id` , @pos := @pos + 1 , `thescore`" " FROM `data` ORDER BY `thescore`" " DESC LIMIT 100";