如何解决attrributes产品加入mysql查询
我这里有一个这样的表结构产品和attribute_values具有多对多的关系,而attribute_values与属性有一对多的关系。这是SQL小提琴http://sqlfiddle.com/#!9/77e01e7
表属性
id | name
1 | Color
2 | Size
表 attribute_values
id | name | attribute_id
1 | Red | 1
2 | Blue | 1
3 | small| 2
4 | XL | 2
表 attribute_value_product
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_values及其选择的值(例如此处的产品XYZ),我想要这样的结果。
[
{
"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()
:
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
请参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。