带有FIND_IN_SET的两个表的MYSQL请求

use*_*349 1 mysql count request

我有两个表(MySQL):

  1. table_products:// cid(text) - 逗号分隔的类别列表// id(int11)

    id   cid
    1    1,2,3        
    2    5,21,8
    3    2,4,15
    
    Run Code Online (Sandbox Code Playgroud)
  2. table_categories

    id   name   parent        
    1    Cat1   0      
    2    Cat2   0
    3    Cat3   0
    4    Cat4   0  
    
    Run Code Online (Sandbox Code Playgroud)

这是我的要求:

SELECT `id`, `name`, `parent`
FROM `table_categories`
ORDER BY `parent` ASC, `id` ASC;
Run Code Online (Sandbox Code Playgroud)

如何执行上述请求并获取每个类别中的产品数量(来自table_products).可能正在使用(FIND_IN_SET).

fth*_*lla 10

如果每个类别都存在table_categories,那么您可以使用:

SELECT table_categories.name, count(table_products.id)
FROM
  table_categories LEFT JOIN products
  ON FIND_IN_SET(table_categories.id, products.cid)
GROUP BY table_categories.name
Run Code Online (Sandbox Code Playgroud)

如果products.cid中存在table_categories.id,则FIND_IN_SET将返回非零值,并且连接将成功.