这就是事情。
我有一个查询,它带来了我在我的数据库中的所有产品。这些产品属于一个或多个类别。所以我有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
有人能帮助我吗?
答案 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