Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача про шкафыю лучшее решение 
:(
    Опции темы
Areostar
Дата 26.7.2020, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Допустим что имеется определённое количество шкафов. у каждого одинаковое количество полочек часть полочек занята книгами.
В наличии имеется база данных(в в таблице номер записи, номер шкафа, номер полочки) занятых полочек. Надо получить список свободных полочек.

Простое решение выбираем всю инфу о занятых полочках. сортируем по порядку. и перебором(количесто шкафов и полочек знаем) находим все что отсутствует!

Возможно ли как нибудь более элегантно?
PM MAIL   Вверх
миг
Дата 20.9.2020, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 15.9.2008

Репутация: нет
Всего: 1



обязательно сортировать? можно просто пробежаться по таблице и запомнить  ID пустых полочек помещая их в массив или другую таблицу
--------------------
Oaks may fall when reeds stand the storm.
PM MAIL   Вверх
Areostar
Дата 20.9.2020, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Смотря по обстоятельствам smile
PM MAIL   Вверх
Akina
Дата 21.9.2020, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(Areostar @  26.7.2020,  15:56 Найти цитируемый пост)
В наличии имеется база данных(в в таблице номер записи, номер шкафа, номер полочки) занятых полочек. Надо получить список свободных полочек.

Ну уже спрашивал же ты. И тебе чётко ответили, что ЭТИХ данных недостаточно - необходимо знать количество шкафов (или иметь их список) и количество полочек на шкаф.

А из таблицы базы данных (при наличии названных выше данных) требуемый список получается запросом с использованием рекурсивного CTE:

Код

WITH RECURSIVE
cte AS ( SELECT 1 num
         UNION ALL
         SELECT num +  
         FROM cte
         WHERE num < GREATEST(@shelf_amount, @closet_amount) )
SELECT t1.num as shelf, t2.num AS closet
FROM cte t1
CROSS JOIN cte t2
LEFT JOIN source_table src ON src.shelf = t1.num AND src.closet = t2.num
WHERE t1.num <= @shelf_amount
  AND t2.num <= @closet_amount
  AND src.id IS NULL


Если имеется служебная таблица с достаточным количеством последовательных натуральных чисел, то можно и не городить огород с CTE...

Это сообщение отредактировал(а) Akina - 21.9.2020, 11:25


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1055 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.