मेरे पास रेटिंग तालिका है जिसमें उपयोगकर्ता द्वारा दिए गए प्रत्येक उत्पाद के लिए रेटिंग है, मैं सभी रेटिंग रिकॉर्ड पुनर्प्राप्त कर रहा हूं, लेकिन साथ ही मैं प्रति उत्पाद के आधार पर औसत रेटिंग प्राप्त करना चाहता हूं लेकिन मैं 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
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
और आउटपुट जैसा आप उम्मीद करते हैं।
जब प्रश्न जटिल हो जाते हैं तो मैं क्वेरी बिल्डर के बजाय क्वेरी का उपयोग करना पसंद करता हूं। आप यह कर सकते हैं:
$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();
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।