如何解决如何使用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
解决方法
使用左连接和平均值选择从表评级中获取数据。
Codeigniter的join() function允许您编写选择部分而不是表名,但是您需要将其放在括号中:
$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.*,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
并按预期输出。
,当查询变得复杂时,我喜欢使用查询而不是查询生成器。您可以这样做:
$this->db->query('select r.*,(select round(sum(r2.rating)/count(*),0) from ratings r2 where r2.product_id = r.product_id ) as 'avg rating' from ratings r')->result();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。