OVH Cloud OVH Cloud

tri libre

3 réponses
Avatar
michel
Bonjour,

J'ai une question qui relève plus de l'algorithmique mais comme c'est un
problème directement lié à une base mysql, je me dis que certains ont
surement la réponse ici.

J'ai une table que je souhaiterais la modifier pour implémenter une
fonctionnalité de tri libre qui permettrait à l'utilisateur de décider de
l'ordre des éléments.

Pour des raisons pratiques liées au code de l'application existante, je
voudrais savoir si il existe une méthode qui permette de ne modifier qu'une
seule ligne lorsqu'on positionne un élément.

Mmmmh , difficile à expliquer...

En gros, je veux positionner l'élément A juste après l'élément B. Au moment
où l'utilisateur valide le formulaire, seul le ou les champs "position" de
la ligne A serait modifiés. Il faudrait bien sur que le tri fonctionne
toujours après ajout/déplacement/suppression d'un élément.

Pour l'instant je ne vois que des méthodes qui nécessitent la modification
de l'ensemble (ou presque) des lignes de la table lorsque la position d'un
élément est modifiée.

J'espère avoir été clair.

michel

3 réponses

Avatar
Antoun
michel wrote:
Bonjour,

J'ai une question qui relève plus de l'algorithmique mais comme c'est un
problème directement lié à une base mysql, je me dis que certains ont
surement la réponse ici.

J'ai une table que je souhaiterais la modifier pour implémenter une
fonctionnalité de tri libre qui permettrait à l'utilisateur de décider de
l'ordre des éléments.

Pour des raisons pratiques liées au code de l'application existante, je
voudrais savoir si il existe une méthode qui permette de ne modifier qu'une
seule ligne lorsqu'on positionne un élément.



je ne vois pas bien quelles peuvent être ces contraintes...

Mmmmh , difficile à expliquer...

En gros, je veux positionner l'élément A juste après l'élément B. Au moment
où l'utilisateur valide le formulaire, seul le ou les champs "position" de
la ligne A serait modifiés. Il faudrait bien sur que le tri fonctionne
toujours après ajout/déplacement/suppression d'un élément.

Pour l'instant je ne vois que des méthodes qui nécessitent la modification
de l'ensemble (ou presque) des lignes de la table lorsque la position d'un
élément est modifiée.

J'espère avoir été clair.

michel




ça me semble algorithmiquement impossible, sauf si la modification
consiste toujours à placer l'élement modifié en premier ou en dernier.
Avatar
Antoun
si en fait ça le fait en jouant sur les fractales...

La colonne Ordre doit être décimale avec une précision maximale. L'ordre
de l'élément modifié est mis à jour comme la moyenne des ordres des deux
éléments entre lesquels l'utilisateur souhaite.

En théorie, ça fonctionne sans problème ; en pratique, il y a un moment
où tu atteins la limite de la précision du SGBD. Le tout est de remettre
tout à plat périodiquement, avant que cette limite ne soit atteinte.

Antoun
Avatar
Denis Beauregard
Le Fri, 21 Apr 2006 21:57:36 +0200, "michel"
écrivait dans fr.comp.applications.sgbd:

J'ai une question qui relève plus de l'algorithmique mais comme c'est un
problème directement lié à une base mysql, je me dis que certains ont
surement la réponse ici.

J'ai une table que je souhaiterais la modifier pour implémenter une
fonctionnalité de tri libre qui permettrait à l'utilisateur de décider de
l'ordre des éléments.

Pour des raisons pratiques liées au code de l'application existante, je
voudrais savoir si il existe une méthode qui permette de ne modifier qu'une
seule ligne lorsqu'on positionne un élément.

Mmmmh , difficile à expliquer...

En gros, je veux positionner l'élément A juste après l'élément B. Au moment
où l'utilisateur valide le formulaire, seul le ou les champs "position" de
la ligne A serait modifiés. Il faudrait bien sur que le tri fonctionne
toujours après ajout/déplacement/suppression d'un élément.

Pour l'instant je ne vois que des méthodes qui nécessitent la modification
de l'ensemble (ou presque) des lignes de la table lorsque la position d'un
élément est modifiée.

J'espère avoir été clair.



Je ne comprends pas. Pourquoi ne pas donner un exemple ?

Disons qu'on a le tableau de 3 colonnes: A 1 alpha

on aurait

A 3 gamma
B 1 delta
C 4 beta

Si j'ajoute la ligne D 2 alpha, sa "position" sera virtuelle puisque
si je regarde les lignes selon la 1re colonne, la table sera

A 3 gamma
B 1 delta
C 4 beta
D 2 alpha

et si je la regarde selon la colonne 2, ce sera

B 1 delta
D 2 alpha
A 3 gamma
C 4 beta

ceci peu importe où l'élément a été inséré...


Denis