Php MySql获取产品搜索结果中的类别计数

Php MySql获取产品搜索结果中的类别计数,php,mysql,sql,left-join,Php,Mysql,Sql,Left Join,我有一个页面的搜索结果,在那里出现了用户搜索的产品。我需要一个查询,这将给我一个所有产品的类别计数 有一些条件: 一个产品可以有多个类别 有一个产品表: productId productName 1 corns 2 Turmeric 3 Cornetto 一个类别表: catId catName ParentCategory 101 Vegetable 111 110

我有一个页面的搜索结果,在那里出现了用户搜索的产品。我需要一个查询,这将给我一个所有产品的类别计数

有一些条件:

  • 一个产品可以有多个类别

  • 有一个产品表:

    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循环


    提前谢谢。

    根据您的结果和SQL,我想您可以试试这个

    只要
    JOIN
    COUNT
    ,您的条件就可以移动到
    其中
    from
    HAVING
    ,因为HAVING from aggregate函数条件

    架构(MySQL v5.7)


    查询#1

    SELECT  pcr.catId,COUNT(*),c.ParentCategory
    FROM 
    Products p
    LEFT JOIN PRODUCT_CATEGORIES_RELATION pcr ON pcr.productId = p.productId
    LEFT JOIN CATEGORIES c on c.catId = pcr.catId
    GROUP BY pcr.catId,c.ParentCategory;
    
    | catId | COUNT(*) | ParentCategory |
    | ----- | -------- | -------------- |
    | 101   | 1        | 111            |
    | 111   | 3        | 0              |
    


    您能提供这些表格中的一些样本数据吗?我根据您的查询和预期结果编写了一个答案,如果没有达到您的预期,您可以显示一些表格数据,帮助我们更清楚地了解您的问题谢谢,我也编辑了我的问题。您可以尝试我的答案,因为查询搜索结果缺失,我还需要那个搜索查询,它将根据用户的搜索条件显示结果。
    SELECT  pcr.catId,COUNT(*),c.ParentCategory
    FROM 
    Products p
    LEFT JOIN PRODUCT_CATEGORIES_RELATION pcr ON pcr.productId = p.productId
    LEFT JOIN CATEGORIES c on c.catId = pcr.catId
    GROUP BY pcr.catId,c.ParentCategory;
    
    | catId | COUNT(*) | ParentCategory |
    | ----- | -------- | -------------- |
    | 101   | 1        | 111            |
    | 111   | 3        | 0              |