php - 如何使用 codeigniter 查询获得每个产品的平均评分?
问题描述
我有评级表,其中包含用户给出的每个产品的评级,我正在检索所有评级记录,但同时我想获得基于每个产品的平均评级,但我无法获得输出
询问 :
$this->db->select('ratings.*');
$this->db->select('select AVG(ratings) as avg_rating from ratings group by product_id');
$this->db->from('ratings');
$this->db->join('users','users.id=ratings.user_id');
$this->db->get()->result();
评分表
id user_id product_id rating
1 4 1 4
2 5 2 4
3 6 1 2
4 7 4 4
预期输出:
id user_id product_id rating avg rating
1 4 1 4 3
2 5 2 4 4
3 6 1 2 3
4 7 4 4 4
解决方案
从表rating中获取数据,使用左连接和 select 作为平均值。
Codeigniter的join() 函数允许你写一个选择部分而不是表名,但是你需要把它放在括号中:
$this->db->select('t1.*, t2.avg_rating, t3.*');
$this->db->from('ratings t1');
$this->db->join('
(select product_id, avg(rating) as avg_rating
from ratings
group by product_id) t2','t2.product_id=t1.product_id','left'
);
$this->db->join('users t3','t3.id=t1.user_id','left');
$this->group_by('t1.userid')
$this->db->get()->result();
生成:
SELECT t1.*, t2.avg_rating, t3.*
FROM ratings t1
left join
(select product_id, avg(rating) as avg_rating from ratings group by product_id) t2
on t2.product_id=t1.product_id
left join users t3
on t1.user_id = t3.id
group by t1.user_id
并按预期输出。
推荐阅读
- android - 是否可以使用 androids new Jetpack Compose 将 fab 或按钮添加到底部栏?
- java - 自 JavaFX 17 以来无法再构建 JavaFX 库
- reactjs - 如何将在线构建的 CKEditor4 添加到 Next JS 项目中
- php - 自定义身份验证与 Sanctum 不兼容
- common-lisp - 在 cl-ppcre 正则表达式中转义引号
- angular - Angular 模块中的嵌套路由问题
- java - 带有 JDK 包的 AWS NodeJS lambda 函数
- r - openxlsx - 读取 xlsx 时防止转换十进制数
- python - 在 PyCharm(专业版)中运行 Pyramid 项目时,找不到方案“file+ini”、协议“wsgi”的匹配加载器
- c# - 如何使用此代码制作 3 层标题网格