繁体   English   中英

过滤产品的一个类别,但带走所有类别的过滤产品

[英]Filter one category of a product, but bring all categories of the filtered products

就是这个

我有一个查询,该查询将数据库中包含的所有产品带入。 这些产品属于一种或多种类别。 所以我有3张桌子。
-产品表
-类别表
-包含两者之间关系的表格。

获取产品时,我使用GROUP_CONCAT获取产品所属的所有类别的名称,并且效果很好。 我得到了我期望的结果。

问题出在我筛选一个类别时。 然后,GROUP_CONCAT不再起作用,它仅带来所需类别的产品,而不带来该产品所属的所有类别。

这是我未针对特定类别进行过滤时的查询。

SELECT p.*, GROUP_CONCAT( c.title SEPARATOR ', ') as category
FROM products p
INNER JOIN products_categories_relation pcr ON pcr.product_id = p.id
INNER JOIN categories c ON pcr.category_id = c.id
WHERE p.status = 1
GROUP BY p.id
ORDER BY p.name ASC
LIMIT 16
OFFSET 0

这是我筛选特定类别时的查询:

SELECT p.*, GROUP_CONCAT( c.title SEPARATOR ', ') as categories
FROM product p
INNER JOIN products_categories_relation pcr ON pcr.product_id = p.id
INNER JOIN categories c ON pcr.category_id = c.id
WHERE p.status = 1
AND pcr.category_id = 27 
GROUP BY p.id
ORDER BY p.name ASC
LIMIT 16
OFFSET 0

有人可以帮我吗?

你可以试试这个

SELECT p.*, GROUP_CONCAT( c.title SEPARATOR ', ') as categories
FROM product p
INNER JOIN products_categories_relation pcr ON pcr.product_id = p.id
INNER JOIN categories c ON pcr.category_id = c.id
WHERE p.status = 1
AND exists( select * from products_categories_relation where products_categories_relation.category_id = 27 and products_categories_relation.product_id = p.id )
GROUP BY p.id
ORDER BY p.name ASC
LIMIT 16
OFFSET 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM