[英]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.