Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

djrasmusp's avatar

transforming a 'advanced' mysql query to a laravel query

Hey i need help with transforming a mysql to laravel. My query is:

SELECT ct.position,
(SELECT position FROM chart_track WHERE `chart_id` = (SELECT id FROM charts ORDER BY id DESC LIMIT 1, 1) AND track_id = t.id) AS last_week,
(SELECT count(*) FROM chart_track WHERE track_id = t.id) AS number_of_weeks,
 t.artist, t.title
FROM charts c 
INNER JOIN chart_track ct ON c.id = ct.chart_id
INNER JOIN tracks t ON ct.track_id = t.id
WHERE c.id = (SELECT id FROM charts ORDER BY id DESC LIMIT 1)
ORDER BY ct.position

I would like to transform this to a laravel query, but im stuck when I try to get the last_week and number_of_weeks fields. I have made this so far:

$id = DB::table('charts')
        ->latest()
        ->first();

    $chart = DB::table('charts')
        ->select('chart_id', 'week', 'position', 'track_id', 'artist', 'title')
        ->join('chart_track', 'chart_track.chart_id', '=', 'charts.id')
        ->join('tracks', 'tracks.id', '=', 'chart_track.track_id')
        ->where('charts.id', '=', $id->id)
        ->orderBy('chart_track.position')
        ->get();

Anyone that can help me forward with this ?

0 likes
2 replies
djrasmusp's avatar

thanks for the answer :) that helped a lot..

Please or to participate in this conversation.