我已经使用left join编写了查询,它连接3个表以获取数据,它们是:
产品:
product_id category_id master_category_id manufacturers_id product_name product_img product_des product_price product_status
17421 194 4,6,7,5 2504 prod_name image-1.jpg ---- ---- 1
主目录:
master_category_id master_category_name original_image picture small thumb icon_img master_category_status
1 Dinnerware/Glassware cat-image1.jpg -- -- -- -- 1
制造商:
manufacturers_id manufacturers_name original_image picture small thumb manufacturers_status
1 CalMil Cal-Mil.png -- -- -- 1
我的问题是:
select (Case When p.product_status = '0' Then 'Inactive'
When p.product_status = '1' Then 'Active'
Else 'Deleted' End) AS status,
m.manufacturers_name,
GROUP_CONCAT(mc.master_category_name) as master_category_name,
TRIM(p.product_name) as product_name,
p.product_status,p.product_id
from products p
left join manufacturers m
on p.manufacturers_id=m.manufacturers_id
left join master_categories mc
on find_in_set(mc.master_category_id,p.master_category_id)
where p.product_name!=''
GROUP BY p.product_name order by TRIM(p.product_name) ASC LIMIT 0,15
每个产品都有多个主类别,这些主类别存储了“产品”表中“主类别id”列的多个主类别id,如上面的“产品”表所示。
我这里的问题是,我的查询返回一个主类别名称,即使是对于没有任何“主类别标识”的产品,也就是说,即使没有分配任何主类别标识,产品也显示主类别名称,并且只有两个主类别的产品显示两个以上的类别。
有谁能帮我查一下有什么问题吗。谢谢。
1条答案
按热度按时间uqxowvwt1#
您需要在“产品id”列上按分组。如果多个产品共享同一个名称,则可能会对这些数据进行分组,并给出不正确的结果。此外,在\集中查找\应与>0条件一起使用。试试这个。