Mysql组查询
我有两个表,其中包含产品信息和产品变体。我试着列出所有的产品,它的颜色变化 表products包含产品的一般信息(名称、说明、启用等) 表product_attributes包含产品的不同选项(颜色、大小、价格等) 我正在尝试获取所有可用的产品,如果该产品有两种颜色,则应显示为两个列表。不幸的是,我下面的查询列出了更多的选项,因为每个尺寸组合也会有一行Mysql组查询,mysql,group-by,Mysql,Group By,我有两个表,其中包含产品信息和产品变体。我试着列出所有的产品,它的颜色变化 表products包含产品的一般信息(名称、说明、启用等) 表product_attributes包含产品的不同选项(颜色、大小、价格等) 我正在尝试获取所有可用的产品,如果该产品有两种颜色,则应显示为两个列表。不幸的是,我下面的查询列出了更多的选项,因为每个尺寸组合也会有一行 SELECT pa.price, pa.color, p.id, p.url_key, p.name FROM product_attribut
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
您需要通过以下方式添加组:
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
在这里可能没有意义,因为价格几乎肯定取决于尺寸,但您不知道价格是针对哪个尺寸的。我尝试按属性\u colors\u id进行分组,因此我为每个产品获得唯一的颜色,然后忽略尺寸。但这给了我所有产品独特的颜色。e、 g.如果产品1为黄色,则只显示一次,而不显示同样为黄色的产品7。谢谢。这是巧妙地分组的正确方式!事实上,在这种情况下,价格不取决于大小,只取决于颜色:)@kris:好的,那么我发布的查询应该会给出正确的结果。请注意,此查询在MySQL中工作,但不会像在大多数其他数据库中那样工作:。在其他数据库中,必须将所有五列添加到GROUP BY。