PHP实现仅展示与选中类别匹配的品牌技术咨询
解决方案:筛选指定分类下有产品的品牌
这问题我之前做电商项目时也碰到过,核心就是要关联brands和products两张表,只保留在目标分类下有对应产品的品牌。下面给你两种常用的实现方式:
方法一:使用INNER JOIN关联查询
这种方式通过内连接直接关联两张表,自动过滤掉没有对应产品的品牌,再用DISTINCT去重(避免同一个品牌因多个产品重复出现):
SELECT DISTINCT b.id, b.name FROM brands b INNER JOIN products p ON b.id = p.brand_id WHERE p.cat = 3;
执行结果会是:
| id | name |
|---|---|
| 1 | nike |
| 3 | reebok |
正好符合需求——只显示分类3下有产品的品牌,puma因为没有分类3的产品被排除了。
方法二:使用子查询先获取有效品牌ID
如果你觉得子查询逻辑更直观,可以先从products表中筛选出分类3下的所有品牌ID,再用这个集合去匹配brands表:
SELECT id, name FROM brands WHERE id IN ( SELECT DISTINCT brand_id FROM products WHERE cat = 3 );
这个写法和方法一的结果完全一致,只是逻辑拆分更明显,适合新手理解。
扩展:统计每个品牌的产品数量
如果页面需要展示每个品牌在该分类下的产品数量,可以在查询中加入GROUP BY和COUNT:
SELECT b.id, b.name, COUNT(p.id) AS product_count FROM brands b INNER JOIN products p ON b.id = p.brand_id WHERE p.cat = 3 GROUP BY b.id, b.name;
执行结果会多出产品数量列:
| id | name | product_count |
|---|---|---|
| 1 | nike | 2 |
| 3 | reebok | 2 |
这样用户能更清楚每个品牌的产品规模,体验更好。
内容的提问来源于stack exchange,提问作者Blu3
相关产品推荐
相关产品推荐

