Php 在_集合中查找_并按匹配数排序

Php 在_集合中查找_并按匹配数排序,php,mysql,Php,Mysql,我创建查询如下。它工作得非常好: $get_products = "SELECT P.*, C.`category_name`, GROUP_CONCAT(`category_name` SEPARATOR ', ') AS cat FROM `products` P NATURAL JOIN `categories` C

我创建查询如下。它工作得非常好:

$get_products = "SELECT P.*, C.`category_name`,
                 GROUP_CONCAT(`category_name` SEPARATOR ', ') 
                 AS cat 
                 FROM `products` P 
                 NATURAL JOIN `categories` C 
                 NATURAL JOIN `product_to_categories` 
                 WHERE FIND_IN_SET(`category_name`, '$selected_categories') 
                    AND `product_price` 
                    BETWEEN '$price_min' 
                    AND '$price_max' 
                 GROUP BY `product_name` 
                 ORDER BY 1 DESC"; 
因此,如果我有产品,即:

苹果属于以下类别:水果绿色圆形
车轮属于以下类别:机器黑色圆形
香蕉属于以下类别:水果黄色长方体
手机属于以下类别:电子产品黑色长方体

然后选择类别:水果圆形
我将收到:
苹果(2匹:水果和圆形),车轮(1匹:圆形)和香蕉(1匹:水果)

现在我试着按照匹配的数量对它进行排序(苹果在第一名有2个匹配,香蕉在第二名有1个匹配,等等…)


我有什么办法可以得到这个吗?

您只需要按组内的类别名称进行排序

$get_products = "SELECT P.*, C.`category_name`, GROUP_CONCAT(`category_name` SEPARATOR ', ') AS cat FROM `products` P NATURAL JOIN `categories` C NATURAL JOIN `product_to_categories` WHERE FIND_IN_SET(`category_name`, '$selected_categories') AND `product_price` BETWEEN '$price_min' AND '$price_max' GROUP BY `product_name` 
                 ORDER BY count(C.`category_name`) DESC"; 

请在您发布代码时引入换行符,我们不希望必须横向滚动几英里才能看到您的完整代码。@CBroe,对不起-我错了。纠正