2013-12-11 6 views
2

Я создаю представление в MySQL от нескольких таблиц (в WordPress/WooCommerce), конечный результат должен выглядеть следующим образом:Выберите столбец, если условие выполняется

id name price sku 
1  test 9.99 ABC 

Таблицы для источника данных настроены так:

ПРОДУКТЫ ТАБЛИЦА

id name 
1  test 

METADATA ТАБЛИЦА

product_id meta_key value 
1   price  9.99 
1   sku  ABC 

У меня возникли проблемы с тем, как заставить meta_key отображаться в виде столбца в таблице окончательного представления.

Это то, что я до сих пор (это не работает, но может быть, это помогает показать логику я хочу использовать, см линии 3-4 ниже):

SELECT 
    products.id, 
    products.name, 
    metadata.value AS price IF meta_key = price 
    metadata.value AS sku IF meta_key = sku 
FROM `products` 
INNER JOIN `metadata` 
ON products.id = metadata.product_id 

ответ

2

Вы должны добавить дополнительные условия к вашему присоединиться к фильтрации meta_key и сделать объединение для каждого типа ключа, который вы хотите сделать столбец:

SELECT 
    products.id, 
    products.name, 
    price.value AS price 
    sku.value AS sku 
FROM `products` 
INNER JOIN `metadata` AS price ON products.id = price.product_id AND price.meta_key = 'price' 
INNER JOIN `metadata` AS sku ON products.id = sku.product_id AND sku.meta_key = 'sku' 

заметь, это покажет только продукт, которые имеют как цену и SKU в таблица метаданных. Если вы хотите показать продукты, которые имеют или или, измените INNER JOIN s на LEFT JOIN s

+0

гул .. это цена и ску действительно таблицы? Я не знал, что мы можем ссылаться на значение поля таким образом –

+1

нет, в этом случае они являются псевдонимами таблицы метаданных, которые были указаны в соединении – jmoerdyk

+1

. Это замечательно. в моей голове открываются новые сферы славы sql. –

Смежные вопросы