Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用mysql的评级系统中获得最高平均值?_Mysql_Sql - Fatal编程技术网

如何在使用mysql的评级系统中获得最高平均值?

如何在使用mysql的评级系统中获得最高平均值?,mysql,sql,Mysql,Sql,我正在我的产品页面中创建一个排序,并使用评级实现排序。 我的问题是我得到了多行相同的产品 我的问题是: SELECT DISTINCT(p.product_id) AS product_id, p.model AS model, r.rating AS rating FROM jp_product AS p LEFT JOIN jp_review AS r ON(p.product_id = r.product_id) LEFT JOIN jp_user AS u ON(p.seller_id

我正在我的产品页面中创建一个排序,并使用评级实现排序。 我的问题是我得到了多行相同的产品

我的问题是:

SELECT DISTINCT(p.product_id) AS product_id, p.model AS model, r.rating AS rating FROM jp_product AS p
LEFT JOIN jp_review AS r
ON(p.product_id = r.product_id)
LEFT JOIN jp_user AS u
ON(p.seller_id = u.user_id)
WHERE p.`status` = 1
AND u.`status` = 1
ORDER BY r.rating DESC;
其结果如下:

*************************** 1. row ***************************
product_id: 143
     model: Kagoshima Satsuma-age
    rating: 5
*************************** 2. row ***************************
product_id: 145
     model: Filter-in Bottle
    rating: 5
*************************** 3. row ***************************
product_id: 143
     model: Kagoshima Satsuma-age
    rating: 2
*************************** 4. row ***************************
product_id: 145
     model: Filter-in Bottle
    rating: 2
*************************** 5. row ***************************
product_id: 51
     model: 4901362107276
    rating: NULL
*************************** 6. row ***************************
product_id: 69
     model: a3
    rating: NULL

如您所见,产品ID 143和145是重复的。 你能帮我吗?

使用
MAX(评级)


你可以试试下面的查询-

SELECT p.product_id AS product_id, p.model AS model, MAX(r.rating) AS rating 
FROM jp_product AS p
JOIN jp_review AS r ON p.product_id = r.product_id
JOIN jp_user AS u ON p.seller_id = u.user_id
WHERE p.`status` = 1 AND u.`status` = 1
GROUP BY p.product_id;
注意:由于您正在筛选来自jp_的数据,用户也意味着您只需要匹配的行,所以不需要左连接简单连接即可

此外,GROUPBY将使行唯一,因此不需要使用distinct


此外,如果要根据产品id进行排序,请在末尾应用“按产品id排序”。

143
145
不重复,因为“重复项”具有不同的评级值。你想如何处理这种情况?我想为每种产品获得最高的评级。@additionster给出的答案是正确的,我会选择这个。
SELECT p.product_id AS product_id, p.model AS model, MAX(r.rating) AS rating 
FROM jp_product AS p
JOIN jp_review AS r ON p.product_id = r.product_id
JOIN jp_user AS u ON p.seller_id = u.user_id
WHERE p.`status` = 1 AND u.`status` = 1
GROUP BY p.product_id;