Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql组查询_Mysql_Group By - Fatal编程技术网

Mysql组查询

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

我有两个表,其中包含产品信息和产品变体。我试着列出所有的产品,它的颜色变化

表products包含产品的一般信息(名称、说明、启用等)

表product_attributes包含产品的不同选项(颜色、大小、价格等)

我正在尝试获取所有可用的产品,如果该产品有两种颜色,则应显示为两个列表。不幸的是,我下面的查询列出了更多的选项,因为每个尺寸组合也会有一行

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。