0
votes

Réorganisez toutes les lignes dans une table SQLite avec une colonne personnalisée `ordre_index`

J'ai une table SQLite personnes : xxx

Je dois garder une trace de la commande à l'aide d'une colonne personnalisée ordre_index . La colonne ordre_index doit démarrer sur 0 .

Disons que je veux déplacer Muhammed pour positionner 1 . Cela me demande de mettre à jour le ordre_index de Sammy et Paul aussi. Le ordre_index de caren n'a pas besoin de changer, car 1> 0 .

est-il possible d'atteindre ce en utilisant SQLite?


0 commentaires

3 Réponses :


0
votes

Ce n'est pas une réponse complète, car votre modèle de données complète peut être modifié, mais je gérerais cette exigence spécifique avec la requête suivante: xxx

c'est-à-dire, juste bumb position à un moins la priorité absolue actuelle. Ensuite, votre logique d'entreprise devrait toujours servir à la personne avec le plus petit indice d'ordre (ce qui pourrait même devenir négatif).


0 commentaires

0
votes

Cette exigence est délicate car elle implique plusieurs mises à jour qui dépendent de l'autre et que l'ordre de ces mises à jour n'est pas garanti.

Mise à jour d'abord toutes les autres lignes qui doivent être mises à jour sauf la rangée de la personne qui Vous voulez déplacer: xxx

mettre à jour la ligne de la personne que vous souhaitez déplacer: xxx

remplacer < code>? Installations dans les deux requêtes avec la nouvelle position.
Voir le Démo .


0 commentaires

0
votes

J'ai créé une solution ( Démo ) basé sur Tim's et FORPAS's Suggestions: XXX

Je pense que cette solution est un peu plus facile à saisir que la suggestion de Forpas. Cependant, y a-t-il des raisons d'utiliser la suggestion de Forpas à la place?


2 commentaires

Considérez-vous cela une solution? Que ferez-vous si vous voulez déménager Caren de 0 à 3? Allez-vous écrire 4 nouvelles requêtes de mise à jour? Et que s'il y a 10 ou 100 rangées dans la table?


Bons points! Je n'avais pas cependant de ces situations. Et je voulais faire référence à votre solution (FORPAS). Je vais l'accepter tout de suite!