2010-07-19 5 views
1

Un peu d'arrière-plan pour que vous compreniez ce que j'essaie de faire. Je fais une page qui prend deux produits d'entrée d'utilisateur et vérifie pour voir s'ils sont compatibles l'un avec l'autre. C'est une table n + 1 * n mySQL car il y a n produits.Mettre à jour la table mySQL en fonction de row = nom de la colonne

Le tableau ressemble

name a b c d e 
a 
b 
c 
d 
e 

Je sais déjà que chaque produit est compatible avec lui-même, afin de gagner du temps, est-il une requête qui remplira automatiquement le tableau de telle sorte que je peux obtenir

name a b c d e 
a  1 
b   1 
c     1 
d      1 
e       1 

Merci

j'oublié de mentionner, chaque produit peut être compatible avec un plusieurs autres produits. La diagonale que je mets en place n'est qu'un point de départ.

Répondre

5

Pas une réponse directe à votre question, mais je sentais que je devais en parler ...

Si possible, vous devriez envisager de changer votre conception à ce qui suit:

 
compatible_products 
product1 product2 
a  b 
a  c 
b  d 
etc... 

Si vous insérez des lignes pour à la fois (a, b) et (b, a) alors votre requête est simple:

SELECT 1 
FROM compatible_products 
WHERE product1 = 'a' AND product2 = 'b' 

aussi, lorsque vous ajoutez de nouveaux produits, vous ne devez changer votre schéma de base de données.

+0

J'ai oublié de mentionner, chaque produit peut être compatible avec plusieurs autres produits. Est-ce que votre réponse s'applique toujours? (Je suis assez nouveau pour mySQL) – tom

+0

@tom: Oui - dans mon exemple, la table a est compatible avec b et c, et b est compatible avec d. –

+0

oh bon point. Merci. juste pour satisfaire ma curiosité, y at-il un moyen de le faire comme j'allais? – tom

3

Pas une réponse à votre question, mais cela ressemble à une erreur de conception. De cette façon, vous devrez ajouter une nouvelle colonne à votre table pour chaque nouveau produit qui apparaît.

Je pense que le meilleur moyen serait de normaliser la table en une table products et une compatibility.

Chaque relation de compatibilité entre un produit et un autre serait un enregistrement.

Le tableau compatibility pourrait ressembler à ceci:

id product1 product2  

0 12   34   
1 33   32   
2 54   1   
3 65   328  

requêtes deviendrait extrêmement facile. Pour trouver une relation, vous devez faire un simple

SELECT id FROM compatibility WHERE (product1 = 18 and product2 = 23) 
           OR (product1 = 23 and product2 = 18) 
Questions connexes