Question

J'ai une table sur mon site où l'utilisateur a la possibilité de réordonner les lignes. Cette partie est facile à faire avec jQuery UI, et d'obtenir le nouveau retour de commande est simple en utilisant la méthode de $('#sortable').sortable("serialize"). Ma question est maintenant, quel est le moyen le plus efficace pour sauver tous ces enregistrements dans la base de données, étant donné que la modification de l'ordre d'un élément change tous les enregistrements de la table? Je sais que je pourrais créer une nouvelle déclaration de UPDATE pour chaque ligne en fonction de leur carte d'identité, mais je me sens comme il doit y avoir une meilleure façon. Est-il?

J'utilise MySQL et ASP.NET.

Était-ce utile?

La solution

Utilisez la commande START TRANSACTION . Cela est beaucoup plus rapide.

Autres conseils

Étant donné qu'il existe potentiellement un je arbitrairement grand nombre de lignes, stocker la commande comme une entrée de chaîne de texte dans le tableau des préférences de l'utilisateur (en supposant que vous avez une telle table). En gros, la valeur par défaut serait une entrée nulle (pour économiser de l'espace disque), ce qui voudrait dire que l'ordre est inchangé par rapport à la commande dans la base de données, et si l'utilisateur change vous pouvez simplement sérialiser l'ordre des lignes (c.-à- si elles avaient la ligne 15, puis 19, puis 3, vous pourriez avoir 15-19-3), puis de lire dehors. Il est une mise à jour unique et échelles indéfiniment (bien, jusqu'à ce que la longueur de la chaîne de texte, mais assez grand doggone pour les types de mediumtext et longtext).


Je quitte ce qui précède au cas où il est applicable à d'autres personnes, mais pour le cas spécifique décrit ci-dessous, je pense que je considérerais stocker les prefs dans un fichier texte. Étant donné que l'ordre est affiché à toute façon l'utilisateur, il n'y a aucun risque pour la sécurité dans les prefs étant dans un fichier texte brut, et vous pouvez réécrire très rapidement la chose. Étant donné la façon dont vous l'avez décrit ci-dessous, j'utiliser un fichier CSV à deux colonnes, mais évidemment vous pourriez mettre en place rend cependant le plus de sens.

Une recherche rapide sur la vitesse de lecture de fichiers a conduit à ce commenter la fonction file_get_contents(), qui suggère que vous voudrez peut-être faire attention à la taille du fichier sera lors de l'examen de la méthode que vous utiliserez pour accéder aux données dans le fichier. Je ne sais pas sur l'écriture.

Votre question manque un peu de clarté au moins pour moi. Je suppose que vous montrer quelques entrées que je désignerai par ID rang ~. Par exemple:

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

Vous dites que le changement « l'ordre d'un élément change tous les enregistrements de la table ». Est-ce vraiment nécessaire dans votre conception? Si l'utilisateur commute les éléments avec id-s 1 et 24, alors vous aurez la liste sérialisé suivant:

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

par itérer cette liste, vous pouvez facilement déterminer quelles lignes doivent être vraiment mis à jour (celui-ci désadaptation l'ordre naturel de rang).

Dans mon exemple, vous devez faire deux mises à jour des requêtes au lieu de six:

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

Vive!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top