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

时间:2017-10-31 01:43:50

标签: mysql

这就是事情。

我有一个查询,它带来了我在我的数据库中的所有产品。这些产品属于一个或多个类别。所以我有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

有人能帮助我吗?

1 个答案:

答案 0 :(得分: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