|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Bonjour à tous,
Soit une table MySQL composée d'une colonne "cat_id" et d'une colonne "prod_id". Classique. Code :
Mais je voudrais y ajouter une 3ème colonne : poids. De façon à faire monter ou descendre les produits dans leur catégorie. Et pour garnir cette colonne pour la première fois, j'ai besoin de faire : Code :
Et je tourne le truc dans tous les sens, avec des tableaux, des sessions...pour préparer la requête UPDATE de la colonne poids... pas moyen... Quelle technique utiliseriez-vous ? D'avance merci. |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Salut
En 1er, pourquoi cette appellation "poids", alors que il s’agirait plutôt de : trie, ordre, classement ? Bon, peu importe, il ne s'agirait toute de même pas de Kg de tomate A mon sens, je verrais plutôt un trie d'abord dans la table "categories", puis après dans la table produits, plutôt que cette table qui rassemble des produits et catégories, qui n'est pas sont rôle je pense. En somme, créer un champ "ordre" dans la table "categories" et champ "ordre" dans "produits".
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
01
|
|
|
#3 | ||
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Bonjour,
Bah...poids, c'est assez fréquemment employé lorsqu'il s'agit de faire "monter" ou "descendre" des articles, par exemple, sur une page... Ben si c'est son rôle, justement : elle associe les id de la table produits et les id de la table catégories, et ensuite, avec une jointure on récupère ce que l'on veut. J'ai trouvé une soluce, finalement, qui a l'air de fonctionner : Code :
Pourquoi faire simple quand on peut faire compliqué ? Merci d'être passé par là. |
||
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Citation:
Essai de faire un trie par catégorie pour voir. On ne récupère pas ce qu'on veut, on ne fait que récupérer des produits qui seront certes triés selon leur catégorie, mais on obtient pas pour autant un trie indépendamment des valeurs des IDs des catégories. Modifier les valeurs des clés des IDs des catégories ne sera certainement pas à faire. Pour ce faire, et en poursuivant ton idée, ce serait de rajouter un champ "poids_cat" dans cette même table. Et c'est là qu'on verra apparaitre un phénomène de répétition qui ne fera pas l'ombre d'un doute qu'il y a quelque chose qui cloche en mettant ces informations de trie dans cette table prod_cat. Maintenant, si cela te conviens ainsi, t'en mieux.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
01
|
|
|
#5 |
|
Membre actif
![]() Inscription : février 2009 Messages : 150 ![]() |
Il faudra forcement une requete par produit si tous sont à changer lors d'une seule execution.
Je comprend mal pourquoi la table doit etre aussi bien ranger, les chiffres du poids peuvent ils ressembler à 500 1000 2733 ?? qui correspondrait à 1 2 3 et donc le 1er 2eme 3eme produit de la catégorie 1. La liste de produits est elle longue ? |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Citation:
Si par exemple il y a déjà 454, 455 et 456 et qu'on souhaite intercaler un produit, on retombe dans le même problème. Pour faire un système de remontée totalement automatique et de manière assez conviviale (ou ergonomique) tout en conservant un ordre sans trou (comme 1,2,3,4 etc) c'est c'est assez simple. On a donc un ordre comme ceci : 1 2 3 <- On veut le faire remonter (donc à 4) 4 5 Il suffit d'ajouter 1 au produit concerné (4) et enlever 1 au produit suivant (changer à 3). Si on veut faire l'opération inverse, soit descendre : on enlève 1 au produit concerné, et on ajoute 1 au produit précédent. En faite, le truc est d'intervertir l'ordre de 2 produits. Certes, ce principe ne permet pas de faire remonter d'un coup de la position 2 à 5 par exemple, il faudra appliquer le mise à jour 3 fois pour faire remonter le produit petit à petit, mais l'avantage c'est qu'il reste simple à gérer. Cependant, il y a des moments où on ne va plus avoir cet ordre, c'est lorsque qu'un produit sera supprimé, ou lorsqu'un produit sera déplacé dans une autre catégorie. Il va avoir un trou entre 2 produits. Mais rien d'insurmontable, il suffit de récupérer tous les produits de la catégorie où un produit a été supprimé, de stocker les IDs des produits dans un tableau Php selon l'ordre en court, puis après, appliquer en boucle un UPDATE en utilisant la clé du tableau Php. En va ré-obtenir un ordre : 0, 1, 2, 3, etc ...
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
01
|
|
|
#7 | |
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Citation:
Et si on ajoute un produit, et bien, dans le formulaire de créa, j'affiche une liste déroulante avec :début + poids + fin et je demande au user où est-ce qu'il veut intercaler le produit. Si il enlève un produit, pas de problème, je le supprime de la table. Le fait qu'il y ait des "trous" dans les poids n'est pas gênant tant que la requête d'affichage fait un ORDER BY poids. |
|
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : février 2009 Messages : 150 ![]() |
Oui donc le script présenté ici n'est pas celui dont tu te sers pour refaire l'ordre à chaque changement...
Et donc tu utilise deja un du bon script pour traiter tes rangements. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com