MySQL-如何透视NVP?

MySQL-如何透视NVP?,mysql,sql,pivot,Mysql,Sql,Pivot,假设我有一个包含以下行的product\u属性表: ================================================================ | product_attribute_id | product_id | name | value | ================================================================ | 1 | 25

假设我有一个包含以下行的
product\u属性
表:

================================================================
| product_attribute_id | product_id | name         | value     |
================================================================
| 1                    | 25         | Author       | John Doe  |
----------------------------------------------------------------
| 2                    | 25         | Author       | Jane Doe  |
----------------------------------------------------------------
| 3                    | 55         | Publisher    | ABC Corp  |
----------------------------------------------------------------
| 4                    | 55         | Release Date | 20100125  |
----------------------------------------------------------------
我正在考虑为全文搜索实现Solr,我认为这个表可能有一些重要的信息需要索引。因此,我认为这个表需要进行数据透视(使用
product\u id
作为数据透视点),这样我就可以将它与其他表结合起来,这些表中的信息应该被索引

问题:

  • 如何在MySQL中实现这一点
  • 我事先不知道所有的名称/值对将是什么。这会是个问题吗
  • 某些属性具有相同的名称(例如上面示例中的“Author”)。这会是个问题吗

  • 这是一个相当标准的实现

    SELECT
    product_id,
    GROUP_CONCAT(if(name = 'Author', value, NULL)) AS 'Author',
    GROUP_CONCAT(if(name = 'Publisher', value, NULL)) AS 'Publisher',
    FROM product_attribute
    GROUP BY product_id; 
    
    你必须

    select distinct(name) from product_attribute
    
    因此,您可以构建上述查询 但是,不,它不能使用相同的名称,组_CONCAT将指定值


    我见过一个实现,它添加一个列并用增量值填充它,这样它就可以使用变量和计数器透视表。但是我在mysql中没有这个功能,这是一个非常标准的实现

    SELECT
    product_id,
    GROUP_CONCAT(if(name = 'Author', value, NULL)) AS 'Author',
    GROUP_CONCAT(if(name = 'Publisher', value, NULL)) AS 'Publisher',
    FROM product_attribute
    GROUP BY product_id; 
    
    你必须

    select distinct(name) from product_attribute
    
    因此,您可以构建上述查询 但是,不,它不能使用相同的名称,组_CONCAT将指定值

    我见过一个实现,它添加一个列并用增量值填充它,这样它就可以使用变量和计数器透视表。但我在mysql中没有