मेरे पास रेटिंग तालिका है जिसमें उपयोगकर्ता द्वारा दिए गए प्रत्येक उत्पाद के लिए रेटिंग है, मैं सभी रेटिंग रिकॉर्ड पुनर्प्राप्त कर रहा हूं, लेकिन साथ ही मैं प्रति उत्पाद के आधार पर औसत रेटिंग प्राप्त करना चाहता हूं लेकिन मैं ouptput प्राप्त करने में असमर्थ हूं

जिज्ञासा :

$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
3
faraz 20 अगस्त 2020, 19:17

2 जवाब

सबसे बढ़िया उत्तर

औसत के लिए चयन के साथ लेफ्ट जॉइन का उपयोग करके तालिका रेटिंग से डेटा प्राप्त करें।

कोडनिर्देशक का 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

और आउटपुट जैसा आप उम्मीद करते हैं।

1
Vickel 20 अगस्त 2020, 21:33

जब प्रश्न जटिल हो जाते हैं तो मैं क्वेरी बिल्डर के बजाय क्वेरी का उपयोग करना पसंद करता हूं। आप यह कर सकते हैं:

$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();
0
Sam Tigle 20 अगस्त 2020, 19:58