Ordre Arbitraire ( Catégories, etc... )

Ordre Arbitraire ( Catégories, etc... ) - PHP - Programmation

Marsh Posté le 05-10-2006 à 18:14:17    

Bonjour, j'ai tout un script qui gere des catégories et des sous catégories.
J'ai fais un champ INT nommé 'pos' pour classer ces catégories selon un ordre arbritraire. Deux fleches ( haut ou bas ) permettent d'augmenter ou de diminuer pos dans la BDD.
Mais ça marche pas trop, la plupart du temps il faut cliquer plusieurs fois pour que une catégorie soit au dessus d'une autre ( par exemple... )
Vous auriez pas des idées pour qqchose de plus éfficace? Surtout que ça a l'air assez courant ce genre de systeme, donc si quelqu'un sait comment ça marche...
 
Merci

Reply

Marsh Posté le 05-10-2006 à 18:14:17   

Reply

Marsh Posté le 05-10-2006 à 18:17:28    

Si tu veux faire passer une catégorie aprés la catégorie qui la suivait, le plus simple, c'est d'inverser la numérotation de ces deux catégories. (par exemple, la catégorie situé en position 2 se retrouvera avec le "pos" = 3 et celle en position 3 se retrouvera avec le "pos" = 2)
 
C'est sur que si tu te contentes d'incrémenter ou de décrémenter la position de la catégorie que tu veux déplacer, ca posera probléme vu que tu te retrouveras au mieux avec deux catégories qui auront le même indice.


Message édité par omega2 le 05-10-2006 à 18:18:29
Reply

Marsh Posté le 05-10-2006 à 18:21:55    

et comment je peux faire ça en une seule requete ?
 
Pour l'instant ma requete c'est ça ?
$sql_up = "UPDATE `lfs_cat` SET pos = pos + 1 WHERE id = '".$_GET['id']."'";
 
Sinon j'peux faire comment ?
 
Dsl mais en fait j'vois pas comment faire ce que tu m'as dit ( mais ça a l'air intéréssant. )


Message édité par Mexican0 le 05-10-2006 à 18:22:14
Reply

Marsh Posté le 05-10-2006 à 19:12:55    

Pour faire, ça, fait en deux étapes :
Premiére étape, tu récupéres les positions des deux éléments à inversé.
Dans la seconde, tu met à jour la position en calculant la nouvelle position de la maniére suivante : pos = ($position1+$position2) - pos
Si pos = $position1, alors "pos" prend la valeur de $position2. Si pos= $position2 alors "pos" prend la valeur de $position1.
 
Ca, c'était la façon globale de le faire à condition de conaitre l'id des deux éléments.
 
Si tu ne conais que l'id d'une seule des deux catégories mais que leur position se suive, alors il faut récupérer la position correspondant à l'id et faire ensuite l'opération suivante :
pos = ($position + ($position+1)) - pos
 
$position contient la position récupéré juste avant. Le +1 peut d'ailleur être remplacé par un -1 en fonction du sens dans lequel tu déplaces ta catégorie.
 
Dans les deux cas, dans la seconde requette tu peux sélectionner les deux élément en fonction de leur position. Ca t'éviteras la création d'une troisiéme requette qui n'aurait servit qu'a récupéré l'id de la catégorie avec laquelle tu veux inversé.
 
Voilà pour la théorie, je te laisses écrire les requettes et on les corrigera ensuite si tu n'y arrives pas. ;)

Reply

Marsh Posté le 05-10-2006 à 19:21:50    

Merci bcp, je vais me débrouiller avec ça :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed