Domanda

Ho una tabella sul mio sito in cui l'utente ha la possibilità di ri-ordinare le righe. Questa parte è facile da fare con jQuery UI, e ottenere il nuovo posteriore ordine è semplice utilizzando il metodo $('#sortable').sortable("serialize"). La mia domanda è ora, qual è il modo più efficace per salvare tutti questi record nel database, dal momento che cambiando l'ordine di un elemento cambia tutti i record nella tabella? So che avrei potuto creare una nuova dichiarazione UPDATE per ogni riga in base alla loro identità, ma mi sento come ci deve essere un modo migliore. C'è?

Sto usando MySQL e ASP.NET.

È stato utile?

Soluzione

Utilizza la START TRANSACTION comando. Questo è molto più veloce.

Altri suggerimenti

Dato che non v'è potenzialmente un numero arbitrariamente grande di righe, vorrei conservare l'ordinamento come voce stringa di testo nella tabella delle preferenze utente (ammesso che abbiate una tabella). In sostanza, il default sarebbe una voce null (per risparmiare spazio disco), il che significa che l'ordinamento è invariato rispetto l'ordine nel database, e se l'utente cambia si può solo serializzare l'ordine delle righe (vale a dire, se avessero fila 15, poi 19, poi 3, si potrebbe avere 15-19-3) e poi appena letto fuori. Si tratta di un singolo aggiornamento e scale a tempo indeterminato (o meglio, fino a quando la lunghezza della stringa di testo, ma che di abbastanza doggone grande per i tipi mediumtext e longtext).


Sto lasciando la precedenza nel caso in cui è applicabile ad altre persone, ma per il caso specifico descritto qui di seguito, penso che vorrei prendere in considerazione la memorizzazione delle preferenze in un file di testo. Dato che l'ordinamento è mostrata al comunque all'utente, non c'è alcun rischio per la sicurezza nelle preferenze di essere in un file di testo in chiaro, e si può riscrivere il tutto molto rapidamente. Dato come hai descritto qui di seguito, vorrei utilizzare un file CSV a due colonne, ma ovviamente è possibile impostare fino tuttavia rende più senso.

Una rapida ricerca su lettura del file ha portato alla velocità delle questo commento sulla funzione file_get_contents(), che suggerisce si consiglia di prestare attenzione a quanto sia grande il file sarà se si considera il metodo che verrà utilizzato per accedere ai dati nel file. Non so sulla scrittura.

La tua domanda manca una certa chiarezza almeno per me. Immagino si mostra un paio di voci a cui mi riferirò per ID ~ rango. Ad esempio:

5~1
6~2
7~3
1~4
24~5
2~6

Ora voi dite che cambia che "l'ordine di un elemento cambia tutti i record nella tabella". Questa è davvero necessaria nel vostro progetto? Se l'utente cambia gli elementi con id-s 1 e 24, allora si avrà il seguente elenco serializzato:

[5~1],[6~2],[7~3],[24~5],[1~4],[2~6]

Ora scorrendo questa lista si può facilmente determinare quali righe devono essere davvero aggiornati (questo uno mismatching l'ordine naturale di rango).

Nel mio esempio si dovrebbe fare due query di aggiornamento invece di sei:

update XYZ set rank=4 where id = 24;
update XYZ set rank=5 where id = 1;

Cheers!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top