У меня есть хорошее решение для этого:
For, selecting 1st 3 record within each group
1) sorting the results asc/desc by applying `order by bars.id` within group_concat()
2) limiting the records by passing the 3rd parameter as the records to limit to SUBSTRING_INDEX(str,'match str','no of records to limit')
SELECT foos.id,
SUBSTRING_INDEX(GROUP_CONCAT(bars.id
order by bars.id),',',3),
bars.author_id
FROM foos LEFT JOIN bars ON bars.foo_id = foos.id
WHERE foos.id = 1
GROUP BY bars.author_id
Результат будет:
+------------------------------------+
| foos.id | bars.id | bars.author_id |
+------------------------------------+
| 1 | 1,3,6 | 10 |
| 1 | 5 | 3 |
| 1 | 44 | 11 |
+------------------------------------+
Позже, на стороне приложения вы можете взорвать его с помощью ',' и использовать его.