Имеется таблица "places". У каждого плейса есть поле - страна.
Цель - выбрать для каждой страны по 5 плейсов(отсортированых по полю из другой таблицы, но пока чёрт с ним, просто выбрать)
Все придуманные решения не подходят в силу того, что выбираются все плейсы и уже они делятся, это не подходит, ибо данных крайне много
Варианты которые на данный момент придумал, но они не подходят:
SET @a:=1;
SET @iso:='';
SELECT
q.*
FROM (
SELECT st.rank,
p.id,
p.lat,
p.lng,
p.country_iso
FROM remake_town_places AS p
LEFT JOIN remake_tool_statistics AS st ON (st.type = 'item' AND st.item_id=p.id)
ORDER BY country_iso ASC,
rank DESC
) AS q
WHERE
(IF(@iso=q.country_iso, @a:=@a+1, ((@a:=1) AND (@iso:=q.country_iso))) <= 5);
Тут выбираются все плейсы
SELECT aaa.country_iso,(SELECT GROUP_CONCAT(id) FROM `remake_town_places` as bbb WHERE aaa.country_iso=bbb.country_iso) as places_ids FROM `remake_town_places` as aaa
Здесь картина примерно та же. Но всё было бы хорошо, если бы можно было бы добавить лимит в подзапросе. Но лимит не отрабатывает
Так же можно было бы решить ещё 1м вложеным внутри вложеного запроса, но область видимости "country_iso" во 2й вложености теряется, использование переменной не помогает
Как ещё можно реализовать данный вопрос?
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться