如何使用 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


qq_笑_17
浏览 59回答 1
1回答

梦里花落0921

使用左连接和选择平均值从表ratings获取数据。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 t1left join         (select product_id, avg(rating) as avg_rating from ratings group by product_id)  t2     on t2.product_id=t1.product_idleft join users t3    on t1.user_id = t3.idgroup by t1.user_id并按照您的预期输出。
打开App,查看更多内容
随时随地看视频慕课网APP