[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Лимитированая выборка по типу
DedMorozzz
В кратце поясню задачу:
Имеется таблица "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 это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.