#mysql #sql #pivot
#mysql #sql #сводить
Вопрос:
Допустим, у меня есть product_attribute
таблица со следующими строками:
================================================================
| 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_id
в качестве точки поворота), чтобы я мог объединить ее с другими таблицами, которые содержат информацию, которая должна быть проиндексирована.
Вопросы:
- Как мне преобразовать это в MySQL?
- Я не знаю заранее, какими будут все пары имя / значение. Будет ли это проблемой?
- Некоторые атрибуты имеют идентичные имена (например, «Автор» в примере выше). Будет ли это проблемой?
Ответ №1:
это довольно стандартная реализация
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
итак, вы можете создать приведенный выше запрос
но НЕТ, это не будет работать с идентичными именами, GROUP_CONCAT объединит значения .
я видел реализацию, которая добавляет столбец и заполняет его значениями приращения, чтобы затем можно было преобразовать таблицу с помощью переменных и счетчика. но у меня этого нет в mysql