具有属性的产品加入mysql查询
我有一个这样的表结构,产品和属性值有多对多关系,属性值和属性有一对多关系。这是SQL小提琴 表属性 表属性值 表属性值产品 餐桌用品 如何从产品XYZ的单个查询中获取产品的属性、属性值及其选定值我希望得到这样的结果具有属性的产品加入mysql查询,mysql,inner-join,Mysql,Inner Join,我有一个这样的表结构,产品和属性值有多对多关系,属性值和属性有一对多关系。这是SQL小提琴 表属性 表属性值 表属性值产品 餐桌用品 如何从产品XYZ的单个查询中获取产品的属性、属性值及其选定值我希望得到这样的结果 [ { "attribute": [ { "id": 1, "name": "Color", "attribute_val
[
{
"attribute": [
{
"id": 1,
"name": "Color",
"attribute_value_id": 1,
"attribute_values": [
{
"id": 1,
"name": "Red"
},
{
"id": 2,
"name": "Blue"
} ]
} ]
},
{
"attribute": [
{
"id": 2,
"name": "Size",
"attribute_value_id": 3,
"attribute_values": [
{
"id": 3,
"name": "small"
},
{
"id": 4,
"name": "XL"
}]
}]
}]
可以在单个查询中完成吗?将相关列上的表连接起来:
select *
from products p
inner join attribute_value_product avp on avp.product_id = p.id
inner join attribute_values av on av.id = avp.attribute_value_id
inner join attributes a on a.id = av.attribute_id
如果您希望属性位于逗号分隔的列表中,则可以按产品分组并使用group_concat:
请参阅。您通常会处理数据显示问题,例如在应用程序代码中编译json位我不会处理json我想要一个QuerySuite。但您正在向我们展示一个通常通过解析二维数组获得的结果。有关构造能够返回此类数组的查询的帮助,请参阅否属性_值必须显示selected和rest以供下拉list@sanu“选定”和“下拉列表”是什么意思?这是一个返回行和列的SQL查询。这就是你在问题和评论中提出的问题:我想要一个问题。
product_id | attribute_value_id
1 | 1 //XYZ - Red
1 | 3 //XYZ - small
2 | 2 //ABC - Blue
2 | 4 //ABC - XL
id | name
1 | XYZ
2 | ABC
[
{
"attribute": [
{
"id": 1,
"name": "Color",
"attribute_value_id": 1,
"attribute_values": [
{
"id": 1,
"name": "Red"
},
{
"id": 2,
"name": "Blue"
} ]
} ]
},
{
"attribute": [
{
"id": 2,
"name": "Size",
"attribute_value_id": 3,
"attribute_values": [
{
"id": 3,
"name": "small"
},
{
"id": 4,
"name": "XL"
}]
}]
}]
select *
from products p
inner join attribute_value_product avp on avp.product_id = p.id
inner join attribute_values av on av.id = avp.attribute_value_id
inner join attributes a on a.id = av.attribute_id
select p.id, p.name,
group_concat(a.name order by a.name) attribute_names,
group_concat(av.name order by a.name) attribute_values
from products p
inner join attribute_value_product avp on avp.product_id = p.id
inner join attribute_values av on av.id = avp.attribute_value_id
inner join attributes a on a.id = av.attribute_id
group by p.id, p.name