За последние 24 часа нас посетили 22298 программистов и 1023 робота. Сейчас ищут 688 программистов ...

Выбор позиций с группированием по признаку

Тема в разделе "MySQL", создана пользователем masterlelik, 21 июл 2019.

  1. masterlelik

    masterlelik Активный пользователь

    С нами с:
    8 ноя 2008
    Сообщения:
    68
    Симпатии:
    0
    Просьба помочь написать запрос или несколько запросов.

    Есть одна таблица со школами:
    Каждая школа может иметь принадлежность к какой-то сети.
    Необходимо выбирать по 10 штук на странице таким образом, чтоб если найдена хотя бы одна школа какой-то сети, то были бы выбраны все школы этой сети (network_id=1), но они не считались бы в те 10, которые указаны в limit 10.
    Только первая школа одной сети входит в десять, остальные идут как бонус. А network_id=0 считаются как уникальные школы и они не должны ни с кем группироваться.
    В итоге результатом запроса может быть 15 записей, 8 из которых имеют network_id=0, 4 с network_id=1, 3 с network_id=2
    Расшифровка limit 10 в данном варианте это 8 с network_id=0 , одна с network_id=1 и одна network_id=2, остальные как бонус.
    Сортировка по заголовку.
    И второй момент, если будет вторая страница (limit 10, 10), то если на первой странице уже выбирались школы с network_id>0 (например с network_id=1), то их не должно выбрать т.к. они все были отображены на первой странице.

    P.S. в самом начале я писал "Необходимо выбирать по 10 штук на странице", а чуть ниже расписал в примере 15 штук. Это не ошибка, на странице будет 10 блоков, только в блоках с network_id>0 будут кнопки для отображения ВСЕХ школ из одной сети в этом блоке, в блоке будет меняться картинка и название. А для школ с network_id=0 в блоке всегда статически будет одна школа.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    Создай песочницу на sqlfiddle или db-fiddle чтоьы уже была создана структура и заполнено достаточное количество записей. Тогда поговорим предметно.