就是这个
我有一个查询,将数据库中拥有的所有产品带入。这些产品属于一类或多类。所以我有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

关于mysql - 过滤产品的一个类别,但带走所有类别的过滤产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47026709/

10-16 18:50