CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

18 May, 2022

Getting an average rating of a TV show using average ratings of its seasons from ratings table (Laravel 9)

 Programing Coderfunda     May 18, 2022     Laravel, php     No comments   

 0

I have 3 tables: shows, seasons and ratings. I would like to get average ratings of specific seasons and then make an average of this for every show and sort them by this value asc or desc. I was able to get this result by this raw query:

$shows = Show::selectRaw('shows.*, avg(x.seasons_avg_points) as ratings_avg_points')
        ->fromSub(function($query){
            $query->selectRaw('shows.id, avg(ratings.points) as seasons_avg_points')
                ->from('shows')
                ->join('seasons', 'shows.id', '=', 'seasons.show_id')
                ->leftJoin('ratings', 'ratings.item_id', '=', 'seasons.item_id')
                ->groupBy('seasons.id');
        }, 'x')
        ->join('shows', 'shows.id', '=', 'x.id')
        ->groupBy('x.id')
        ->get()->sortBy('shows_avg_points');

However I prefer to use Laravel eloquent functions so I tried also this:

$shows = Show::with(['seasons' => function($query){
        $query->withAvg('ratings', 'points');
    }])->withAvg('seasons', 'ratings_avg_points')->get();

Unfortunately, it only works without ->withAvg('seasons', 'ratings_avg_points'), as there can't be made an average of a computed column (ratings_avg_points) and it can't be found.


shows | id | name | |----|--------| | 1 | show 1 | | 2 | show 2 | | 3 | show 3 |

seasons | id | show_id | item_id | name | |----|---------|---------|----------| | 1 | 1 | 1 | season 1 | | 2 | 1 | 2 | season 2 | | 3 | 2 | 3 | season 1 | | 4 | 2 | 4 | season 2 | | 5 | 3 | 5 | season 1 | | 6 | 3 | 6 | season 2 |

ratings | id | item_id | points | |----|---------|--------| | 1 | 1 | 0 | | 2 | 1 | 20 | | 3 | 2 | 0 | | 4 | 2 | 30 | | 5 | 3 | 0 | | 6 | 3 | 40 | | 7 | 4 | 0 | | 8 | 4 | 50 | | 9 | 5 | 0 | | 10 | 5 | 60 | | 11 | 6 | 0 | | 12 | 6 | 70 |

result | id | name | ratings_avg_points| |----|--------|-------------------| | 3 | show 3 | 32.5 | | 2 | show 2 | 22.5 | | 1 | show 1 | 12.5 |


Is there a way I can get Show models with their average rating values without using that 'ugly' query above?

  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Laravel auth check login
          <?php     Laravel auth check login     use Illuminate\Support\Facades\ Auth ;     if ( Auth :: check()) {         // The use...
  • JqueryUI Tutorial
    JqueryUI Tutorial    JqueryUI is the most popular front end frameworks currently. It is sleek, intuitive, and powerful mobile first fr...
  • window.location.replace() is not working
    just wanna ask why does window.location.replace is not working in my page. I've been working on it for weeks. It works fine on my other ...
  • Comments in PHP in Hindi
    PHP में comments programmer को code समझने के लिए दिया जाता है | ये Comment lines server द्वारा read नहीं की जाती | PHP में दो प्रकार से comm...
  • Inertia and React or Vue
    Hi just checking your thoughts on whether to learn React or Vue, I want to learn React as it may be better to find work and it has a larger ...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • July (4)
  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda