Algorithme de gestion de position dans une table SQL

J’ai un petit doute, comment gérer la situation suivante. Dans une table de firebase database, enregistrez les données pertinentes dans différentes colonnes et, à la fin, enregistrez l’ordre exact dans une colonne appelée position. Cette table est liée à une grid. Maintenant, je suis en train d’implémenter la fonctionnalité qui va changer la position des lignes, mais je dois encore mettre à jour la firebase database. Je demandais quelle est la meilleure pratique ou le moyen le plus pratique d’y parvenir?

Et la suggestion est la bienvenue.

Exemple

Nom du poste

abc 1

def 2

ghj 3

Maintenant je clique sur le bouton et je reçois ce qui suit

Nom du poste

def 1

abc 2

ghj 3

J’espère que je me suis expliqué!

Basé sur les commentaires, ceci est le véritable exemple:

TABLE1 avec 3 colonnes ID1, ID2, POSITION
ID1 ET ID2 sont des FK et la table a une PK basée sur ID1 et ID2
Lorsque je sélectionne les données à afficher, j’utilise la requête suivante SELECT NAME, ETC FROM TABLE2 INNER JOIN TABLE1 ON ID1 = ID1 OERE ID2 = 511 ORDER BY POSITION

Maintenant, je dois modifier la position sur deux éléments pour que la ligne de la TABLE1, par exemple 311 511,5, devienne 311 511,4 et que la ligne qui était 433 511,4 devienne 433 511,5. L’opposé.

J’espère que cela a aidé à éclaircir ma question.

À votre santé!

Lorsque vous dites: “modifier la position en lignes” , voulez-vous dire déplacer les lignes de haut en bas dans la table (par rapport à l’ordre des position )?

Si c’est le cas, pour déplacer la ligne vers le haut, vous devez échanger la position avec la ligne précédente. Pour le déplacer vers le bas, vous devez faire la même chose avec la rangée suivante. En fonction de votre dialecte SQL, la syntaxe utilisée pour échanger des valeurs de différentes lignes ressemblera probablement à ceci:

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

Cet exemple déplace la ligne 3 vers le haut et la ligne 2 vers le bas. Remplacez les 2 et 3 selon vos besoins …

BTW, cela devrait fonctionner même s’il existe une contrainte UNIQUE sur la position (confirmée sous Oracle).

Pour plus d’idées, vous pouvez jeter un oeil à cette question .

Je créerais un tableau pour enregistrer les résultats. Dans mon exemple / solution, le tableau à enregistrer s’appelle des “échelles” et les données proviennent de “données”. Il vide d’abord la table, puis définit la variable de position temporaire sur 0 et commence à augmenter / insérer.

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