在我目前的设置中,我有两个表:product
和rating
。执行“加权”SQL查询
产品表
- PRODUCT_ID
- 评级
的product
表包含了一大堆额外的信息,但对于这个问题,我专注于只有这两个领域。
评分表
- PRODUCT_ID
- 评级
- USER_ID(谁评估)
- is_admin - 对额定用户是否是管理员
原因布尔我们首先收集管理员评分,这是因为我们想要权衡管理员与普通用户(40%)相比,评分略高(60%)。 product
表中的rating
列等于所有管理员评分的AVG。在一般的评级是1和5
因此,对于每一个产品,我们必须考虑四个场景之间:
RATINGS BY TOTAL
USER ADMIN RATING
---- -----
no no = 0
yes no = AVG of user ratings (`ratings` table)
yes yes = 0.6 AVG of admin ratings (`product_table`) + 0.4 AVG of user ratings (`ratings` table)
no yes = AVG of admin ratings (`product_table`)
目前检索数据集的SQL查询看起来是这样的:
$sql = "SELECT p.product_id,
(COALESCE(p.rating,0)+COALESCE(j.sum,0))/(COALESCE(p.rating/p.rating,0)
+ COALESCE(j.tot,0)) AS rating
FROM product p
LEFT JOIN
(SELECT SUM(rating) AS sum ,
COUNT(rating) AS tot,
product_id FROM rating
WHERE is_admin_rating=FALSE GROUP BY product_id) j
ON (p.product_id = j.product_id) LEFT JOIN product_description pd
ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s
ON (p.product_id = p2s.product_id)";
然后,该查询会附加各种不同的排序选项(评级为默认值),此外,我们还使用LIMIT
“分页”搜索结果。
有没有办法将加权评分纳入查询?或者我将不得不把它分解成几个查询?
我重新编写了关于这四个场景的部分。我相信这更清楚。我无法理解您为所有场景获得“总评分”的方法,因此我没有对您的措辞做任何更改(但为了清楚起见,我建议您改进这些描述)。 – Smandoli
谢谢!我将更新帖子以使其更加简洁 – AnuragBabaresco
您是否拥有更多管理员,以便他们每个人可以对更多次产品评分?或者一个产品总是只有一个管理员评级? – shadyyx