我有一个页面的搜索结果,其中出现的产品是由用户搜索。我需要一个查询,这将给我一个所有产品的类别计数。
有一些条件:
一个产品可以有多个类别。
有一个产品表:
productId productName
1 corns
2 Turmeric
3 Cornetto
一个类别表:
catId catName ParentCategory
101 Vegetable 111
110 Chair 0
111 Edible 0
112 Table 0
113 Rooms 0
和一个产品类别关系
id productId catId
1 1 101
2 1 111
3 2 111
4 3 111
我用于搜索结果的查询是:
SELECT p.productName,
GROUP_CONCAT(c.catId) as categoryid,
GROUP_CONCAT(c.ParentCategory),
c.catName,
c.Parent_Category
FROM Products p
LEFT JOIN `REL_Products__Categories` pc
ON pc.`productId` = p.`productId`
LEFT JOIN `Categories` c
ON pc.`catId` = c.`catId`
WHERE p.isActive = 1
AND p.Searchable = 1
GROUP BY p.record_number
HAVING (p.productName LIKE '%edible%'
OR p.Description LIKE '%edible%'
OR c.catName LIKE '%edible%)
此查询的结果如下:
productId productName categoryid ParentCategory
1 corns 101,111 111,0
2 Turmeric 111 0
3 Cornetto 111 0
现在我需要上面的表格:
Category Id Count Parent Id
101 1 111
111 3 0
我是不是做错了,可能是第一个查询的结果可以自定义,这样我就可以接近我的最终结果了。请建议我该怎么做。
或者这完全可以通过sql查询实现,或者我需要在其中使用php循环?
提前谢谢。
1条答案
按热度按时间eivgtgni1#
从你的结果和sql我想你可以试试这个。
只是
JOIN
以及COUNT
,您可以移动到WHERE
从HAVING
因为有来自聚合函数的条件。架构(mysql v5.7)
查询#1
db fiddle视图