2010-12-23 4 views
0

У меня есть две таблицы, содержащие информацию о продукте и вариации продукта. Я пытаюсь перечислить все продукты, и это цветовые вариации.Запрос группы Mysql

В таблице продуктов содержится общая информация идет о продукте (наименование, описание, включено и т.д.)

В таблице product_attributes содержит различные варианты продукта (цвет, размер, цена и т.д.)

I «Я пытаюсь получить все доступные продукты, и если продукт доступен в двух цветах, он должен отображаться как два списка. К сожалению, мой запрос ниже содержит гораздо больше опций, так как будет строка для каждой комбинации размеров.

SELECT pa.price, pa.color, p.id, p.url_key, p.name FROM product_attributes AS pa INNER JOIN products AS p ON pa.product_id = p.id && p.active = 1 

Есть ли у кого-нибудь идеи, как достичь этого, лучшего и умного?

Я надеюсь, вы понимаете мой вопрос

Заранее спасибо,

Привет!

id mediumint(7) NO PRI NULL auto_increment 
type tinyint(3) NO  1  
url_key varchar(54) NO  NULL  
name varchar(48) NO  NULL  
description text NO  NULL  
weight float NO  0  
active tinyint(3) NO  0  
in_feed tinyint(3) NO  0  
tax_class tinyint(3) NO  0  
meta_title varchar(48) NO  NULL  
meta_keywords varchar(48) NO  NULL  
meta_description text NO  NULL  
manage_stock tinyint(3) NO  0  
attribute_designers_id mediumint(7) NO  0  
attribute_size_family_id mediumint(7) NO  0 

id mediumint(7) NO PRI NULL auto_increment 
product_id mediumint(7) NO MUL NULL  
sku varchar(48) NO  NULL  
price float NO  NULL  
special_price float NO  0  
special_price_from_date datetime NO  NULL  
special_price_to_date datetime NO  NULL  
cost float NO  0  
new_from_date datetime NO  NULL  
new_to_date datetime NO  NULL  
attribute_colors_id mediumint(7) NO  NULL  
color varchar(24) NO  NULL  
attribute_sizes_id mediumint(7) NO  NULL  
quantity mediumint(7) NO  0 
+0

Я пробовал GROUP BY attribute_colors_id, поэтому я получаю уникальный цвет для каждого продукта, а затем игнорирую размеры. Но это дает мне уникальные цвета для всех продуктов. например если у меня есть желтый цвет для продукта 1, это будет отображаться только один раз, а не показывать продукт 7, который также имеет желтый цвет. – Kristian

ответ

1

Вы должны добавить группу по:

SELECT pa.price, pa.color, p.id, p.url_key, p.name 
FROM product_attributes AS pa 
INNER JOIN products AS p 
ON pa.product_id = p.id && p.active = 1 
GROUP BY p.id, pa.color 

Обратите внимание, что ваша колонка pa.price вероятно не имеет смысла здесь, так как цена почти наверняка зависит от размера, но вы не знаете, какой размер цена для.

+0

Спасибо. Это был правильный способ группировки! На самом деле в этом случае цена не зависит от размера, только по цвету :) – Kristian

+0

@kris: ОК, тогда запрос, который я опубликовал, должен дать правильный результат. Обратите внимание, что этот запрос работает в MySQL, но * не будет * работать как есть в большинстве других баз данных: http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html. В других базах данных вы должны добавить все пять столбцов в GROUP BY. –

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