Mysql - Как объединить таблицы для пользовательских заголовков полей и данных в 1 записи - PullRequest
1 голос
/ 06 июля 2011

Products Таблица:

id   product_name
-----------------
20   Toy Car

Product_attr Таблица:

id  product_id  label  value
-----------------------------
1   20          Price  20.00
2   20          Color  Red

Нужен оператор sql для возврата одной строки, содержащей значения, как в случае с заголовками.

id,  product_name,  price,  color
----------------------------------
20   Toy Car        20.00    Red

1 Ответ

3 голосов
/ 06 июля 2011

Это то, что вы ищете:

SELECT 
  Products.id, 
  Products.product_name,
  Max(case label when 'Price' then product_attr.value else null end) as price,
  Max(case label when 'Color' then product_attr.value else null end) as color
FROM Products 
  LEFT JOIN product_attr 
    ON Products.is = product_attr.product_id
GROUP BY Post.headline, Post.date

Однако я должен написать некоторые соображения по поводу вашего дизайна:

  • Что произойдет, если продукт имеет более одной записискажем, для цвета?(то же самое относится и к цене)
  • LEFT JOIN, чтобы продукты всегда были в наличии.Но может ли продукт не иметь цвет?или цена?
  • Вы пытаетесь использовать общие атрибуты, но вы теряете систему набора, смешивая строки и числа (поле value в product_attr).Это сбивает с толку и никогда не заканчивается хорошо ...
  • В целом: у продукта есть цвет?Объявите цветное поле в products!У продукта есть цена?Объявите поле цены в products!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...