Désolé pour la longueur du post.
J'ai besoin de gérer des options multiples pour une gamme de produits.
Pour simplifier et optimiser les requêtes, j'ai décidé d'utiliser des techniques de bit bashing
http://www.webmaster-hub.com/publication/article75.html
Je dois gérer ces options :
- dans le stockage de mes données en SQL
- Dans les traitements en PHP
- En javascript : gestion des cases à cocher.
J'ai une connaissance théorique de ces techniques. Mais j'avoue ne pas être très à l'aise avec les opérateurs binaires.
Le Problème :
Je doit gérer de [1..n] options contenant chacune de [2..m] possibilités.
Je ne connais pas les valeurs max de n et de m.
Les possibilités pour une option donnés sont mutuellement exclusive.
Même si en début de projet je vais essayer d'être le plus exhaustif possible sur les différentes options, je veux pouvoir ajouter de nouvelles options ou de nouveaux choix sans problème.
Je ne veux pas gérer ces options avec des requêtes SQL complexe, et une ribambelle de AND ou de OR. D'où le choix du bit bashing.
Exemple avec 3 options :
Option 1 :
=> Choix A, B, C, D, E, F
Option 2 :
=> choix A, B
Option 3 :
=> A, B, C, D
Je pourrais avoir les produits :
Produit 1 : 1A & 2A & 3A
Produit 2 : 1D & 2A & 3C
Produit 3 : 1A & 2A & 3D
etc....
Mon problème va se situer :
1. Au niveau du stockage dans la base SQL
2. Au niveau de la sélection.
La Solution :
Format du champ de stockage :BIGINT unsigned ( 64-bits ).
Cela va me laisser 64 possiblités d'option ce qui devrait être suffisant ( j'espère ! ).
Première approximation, sans forcer, une trentaine d'options
Concrètement :
1. Comment je stocke mes valeurs d'option dans la base ? Est-ce que je suis obligé de les saisir en base 10 ou est-ce qu'il est possible de les saisir dans une autre base ( base Hexa ) ?
En base 10, si je dépasse les 30 options, la saisie est sujette a erreur.
2. Pour stocker la valeur d'un produit :
C'est le plus simple. Je pense qu'en faisant un & binaire entre les options c'est bon.
3. La sélection des produits
La sélection des produits va dépendre de cases à cocher gérer par l'utilisateur final.
J'ai envie ( en javascript ) de stocker la résultante des choix de l'utilisateur dans une seule variable.
Mon problème c'est que je doit stocker des & et des | dans cette variable :
Ex : Si l'utilisateur a coché toutes les cases possibles. Sauf erreur de ma part :
( 1A | 1B | 1C....etc ) & ( 2A | 2B ) & ( 3A | 3B | 3C | 3D )
Le plus simple serait d'avoir une seule variable que je pourrais modifier sur chaque action de check, uncheck. Est-ce que c'est possible en utilisant les opérateurs sur les bits ?
Est-ce qu'il serait préférable de gérer une variable par option ?
Ouf !....
Merci à tout ceux qui auront eu le courage de lire jusqu'ici