编辑: 我的意思是动态是如果我添加另一个属性,如存储,我不想更改查询。存储可以有32gb或64gb,然后创建总共18种组合。现在我必须添加另一个连接和更多列来选择。我希望能够只更改属性ID列表,它将创建一个逗号分隔的属性名称和ID列表。
我有2个属性颜色和大小。每个属性都有一个或多个值。
示例:
Color: red, yellow, blue
Size: small, medium, large
我需要创建一个查询,根据任意数量的属性创建所有可能组合的列表。
在这种情况下,它将是:
Red small
red medium
red large
yellow small
yellow medium
yellow large
我想出了一种方法来为2个属性做这件事,但我需要它更具动态性
架构:
CREATE TABLE `phppos_attribute_values` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`ecommerce_attribute_term_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`attribute_id` int(10) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`deleted` int(1) NOT NULL DEFAULT '0',
`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `name_attribute_id` (`name`,`attribute_id`),
KEY `phppos_attribute_values_ibfk_1` (`attribute_id`),
CONSTRAINT `phppos_attribute_values_ibfk_1` FOREIGN KEY (`attribute_id`) REFERENCES `phppos_attributes` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
查询:
SELECT a1.name,a1.id,a2.name,a2.id
FROM phppos_attribute_values a1
JOIN phppos_attribute_values as a2 ON a2.attribute_id = 2
WHERE a1.attribute_id = 1
结果:
+--------+----+--------+----+
| name | id | name | id |
+--------+----+--------+----+
| red | 1 | small | 7 |
| red | 1 | medium | 8 |
| red | 1 | large | 9 |
| yellow | 2 | small | 7 |
| yellow | 2 | medium | 8 |
| yellow | 2 | large | 9 |
| blue | 3 | small | 7 |
| blue | 3 | medium | 8 |
| blue | 3 | large | 9 |
+--------+----+--------+----+
最后我只需要所有组合的ID。
上面的查询有效,但它是静态的;我希望能够动态获取属性ID,而不是每次添加属性时都必须更改查询。