【问题标题】:product with attrributes join mysql query具有属性的产品加入mysql查询
【发布时间】:2020-08-22 19:25:21
【问题描述】:

我有一个像这样的表结构,其中 products 和 attribute_values 具有多对多关系,而 attribute_values 与属性具有一对多关系。这是 SQL Fiddle 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"
          }]
      }]
  }]

可以在单个查询中完成吗?

【问题讨论】:

  • 您通常会在应用程序代码中处理数据显示问题(例如编译 json 位)
  • 没有json我会处理我想要一个查询
  • 当然。但是您向我们展示了通常通过解析二维数组获得的结果。
  • 有关构建能够返回此类数组的查询的帮助,请参阅meta.stackoverflow.com/questions/333952/…

标签: mysql inner-join


【解决方案1】:

在其相关列上加入表格:

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

【讨论】:

  • 不,attribute_values 必须显示选中并保留下拉列表
  • @sanu 选中下拉列表是什么意思?这是一个返回行和列的 SQL 查询。这就是您在问题和评论中提出的问题:我想要一个查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多