具有属性的产品加入mysql查询

具有属性的产品加入mysql查询,mysql,inner-join,Mysql,Inner Join,我有一个这样的表结构,产品和属性值有多对多关系,属性值和属性有一对多关系。这是SQL小提琴 表属性 表属性值 表属性值产品 餐桌用品 如何从产品XYZ的单个查询中获取产品的属性、属性值及其选定值我希望得到这样的结果 [ { "attribute": [ { "id": 1, "name": "Color", "attribute_val

我有一个这样的表结构,产品和属性值有多对多关系,属性值和属性有一对多关系。这是SQL小提琴

表属性

表属性值

表属性值产品

餐桌用品

如何从产品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:


请参阅。

您通常会处理数据显示问题,例如在应用程序代码中编译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