【问题标题】:MYSQL request from two tables with FIND_IN_SET来自带有 FIND_IN_SET 的两个表的 MYSQL 请求
【发布时间】:2013-04-17 12:44:27
【问题描述】:

我有两个表(MySQL):

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

    id   cid
    1    1,2,3        
    2    5,21,8
    3    2,4,15
    
  2. table_categories

    id   name   parent        
    1    Cat1   0      
    2    Cat2   0
    3    Cat3   0
    4    Cat4   0  
    

这是我的要求:

SELECT `id`, `name`, `parent`
FROM `table_categories`
ORDER BY `parent` ASC, `id` ASC;

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

【问题讨论】:

    标签: mysql count request


    【解决方案1】:

    如果每个类别都存在于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
    

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

    【讨论】:

    • 谢谢。此请求不返回空类别...如何返回空类别。谢谢!
    • @user889349 我使用 LEFT JOIN 而不是 INNER JOIN 更改了我的查询,现在应该可以了
    • 我将您的查询重写为 SELECT C.id, C.name, C.parent, C.description, COUNT(*) AS products FROM categories C LEFT JOIN products P ON FIND_IN_SET( C.id, P.cid) GROUP BY C.name ORDER BY C.ordering ASC, C.parent ASC, C.id ASC 但每次这个返回 1 即使是空类别...
    • @user889349 抱歉,如果加入失败,我还必须更改 count(),table_products.id 将为 null,现在不计入
    • @fthiella 如何加快查询响应速度,因为我有数百万的数据并且加载数据需要 23 秒?
    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2020-04-24
    • 2011-06-12
    • 2017-07-05
    相关资源
    最近更新 更多