Table looks like this:
id ... item_id likes 1 1 200 1 300 1 400 1 4 ... 2 54 2 31 3 22
How to get 3 or less items for each item_id with most likes?
So for my example output should looks like this:
[ item_id: 1, likes: 200, ], [ item_id: 1, likes: 300, ], [ item_id: 1, likes: 400, ], [ item_id: 2, likes: 54, ], [ item_id: 2, likes: 31, ], [ item_id: 3, likes: 22, ],
Advertisement
Answer
Since MySQL 8.0 you can use window function row_number
with n as ( select id, item_id, likes, row_number() over (partition by item_id) rn from tbl ) select item_id, likes from n where rn < 4;
<?php $query = "with n as ( select id, item_id, likes, row_number() over (partition by item_id) rn from tbl ) select item_id, likes from n where rn < 4;"; // Select using Laravel $rows = $db::select($db::raw($query)); var_export($rows);