一点点背景,让你明白我在做什么。我正在制作一个页面,它需要两个用户输入产品并检查它们是否彼此兼容。这是一个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
由于
我忘了提,每个产品都可以与其他几个产品兼容。我投入的对角线只是一个起点。
答案 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)