MySQL select 具有属性和属性值的产品 - 已分组

MySQL select products with properties and properties values - grouped

我正在开发自定义电子商务解决方案。我开始指出我无法获得具有属性和属性值的产品 - 按名称分组。 例如,用户在 category_01 中,其中有 5 个产品。我想向他展示具有可用值的属性过滤器。但只有这 5 种产品的属性和价值。我能够获得分组的属性标题,但我不知道如何也获得分组的属性值。

CREATE TABLE `shop_products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`status` tinyint(1) unsigned NOT NULL DEFAULT '1',
`title` varchar(255) COLLATE utf8_unicode_ci,
`sku` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` double(10,4) unsigned NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE `shop_products_properties` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(10) unsigned NOT NULL,
`title` varchar(255) COLLATE utf8_unicode_ci,
`deleted` tinyint(1) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `product_id_foreign` (`product_id`),
CONSTRAINT `product_id_foreign` FOREIGN KEY (`product_id`) 
REFERENCES `shop_products` (`id`) ON DELETE CASCADE
)

CREATE TABLE `shop_products_properties_values` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`property_id` int(10) unsigned NOT NULL,
`value` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`deleted` tinyint(1) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `values_property_id_foreign` (`property_id`),
CONSTRAINT `values_property_id_foreign` FOREIGN KEY (`property_id`) 
REFERENCES `shop_products_properties` (`id`) ON DELETE CASCADE
)

我使用的是 Laravel,所以我得到的筛选产品具有 hasMany 属性和 hasMany 值。这工作正常,但现在我需要按标题对属性进行分组并按值对它们的值进行分组。

示例:

1.Product
shop_products: T-shirt
shop_products_properties: Color, Size, Material
shop_products_properties_values: Black, Red, White, XS, S, M, Cotton

2.Product
shop_products: Hoodie
shop_products_properties: Color, Size
shop_products_properties_values: Red, Green, White, M, L, XL

我需要得到这样的结果:

Colors: Black, Red, White, Green, White
Sizes: XS, S, M, L, XL
Materials: Cotton

我不知道是否可以创建 mysql 查询来获得此结果,或者我应该过滤和自定义 collection...我将不胜感激任何帮助

假设我已正确解释您的数据结构,此查询将执行您想要的操作。

SELECT p.title, GROUP_CONCAT(DISTINCT v.value ORDER BY v.value) AS `values`
FROM shop_products_properties p
LEFT JOIN shop_products_properties_values v
ON v.property_id=p.id
GROUP BY p.title

输出:

title       values
Color       Black,Green,Red,White
Material    Cotton
Size        L,M,S,XL,XS

Demo on rextester