根据row = column name更新mySQL表

时间:2010-07-19 19:34:41

标签: mysql sql database

一点点背景,让你明白我在做什么。我正在制作一个页面,它需要两个用户输入产品并检查它们是否彼此兼容。这是一个n + 1 * n mySQL表,因为有n个产品。

该表格如

name    a    b    c    d    e
a
b
c
d
e

我已经知道每个产品都与自身兼容,所以为了节省时间,是否有一个查询会自动填写表格以便我可以获得

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

由于

我忘了提,每个产品都可以与其他几个产品兼容。我投入的对角线只是一个起点。

2 个答案:

答案 0 :(得分:5)

不是你问题的直接答案,但我觉得我必须提到它......

如果可能,您应该考虑将设计更改为以下内容:

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

如果您为(a,b)和(b,a)插入行,那么您的查询很简单:

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

此外,当您添加新产品时,您不必更改数据库架构。

答案 1 :(得分:3)

不是你问题的答案,但这听起来像是一个设计错误。

这样,您就必须为每个出现的新产品在表格中添加一个新列。

我认为更好的方法是将表格规范化为一个products和一个compatibility表。

产品与另一产品之间的每个兼容关系都是一条记录。

compatibility表可能如下所示:

id   product1    product2    

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

查询将变得非常容易。要找到一个关系,你必须做一个简单的

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