[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск пропущенных чисел в таблице
Страницы: 1, 2, 3
Valick
ABC, чисто не там где убирают, а там где не мусорят wink.gif


_____________
Стимулятор ~yoomoney - 41001303250491
GET
Цитата
ABC, чисто не там где убирают, а там где не мусорят

Valick

Павел, я Вас умоляю...smile.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
sergeiss
Цитата (Valick @ 11.07.2014 - 19:04)
на самом деле в реальном приложении не должно возникать такой задачи

Категоричное и неверное утверждение. В реальном приложении могут быть совершенно разные задачи.
Если речь идет про пропуски автоинкрементного айди, то, может быть, и не надо его искать. Но могут последовательности чисел для совершенно других целей, чем автоинкремент.

Например, нумерация домов на улице. Вот есть у тебя БД с данными о городе каком-то. У каждой улицы есть дома. Нумерация не обязана быть сквозной, в реальной жизни всегда образуются пропуски. И вот тут очень может быть полезным алгоритм поиска пропусков номеров домов. Для любой улицы. Количество домов заведомо небольшое, десятки (в редких случаях сотни).
В таком случае, кстати, можно завести опорную таблицу с нумерацией от 1 до, допустим, 1000.

Можно найти и другие полезные применения. Пример с домами - это просто первое, что пришло в голову.


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
GET
sergeiss
+
Я тоже так думаю, конечно применений может быть масса, другое дело, что это не тривиальная задача и вероятно не должна быть обычной частью алгоритма, но как решение какой-то специфической задачи вполне.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Valick
Цитата
Пример с домами - это просто первое, что пришло в голову.

вот именно и не совсем удачное обоснование
зачем искать отсутсвующий дом?

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (Valick @ 12.07.2014 - 12:00)
зачем искать отсутствующий дом?

Например для того, чтобы дать этот номер новому дому, который там будут строить. Такая задача может возникнуть в каком-нибудь приложении, связанным с проектированием.
И что также важно. Если знаешь чистое решение на SQL, то тогда сможешь его использовать вне зависимости от языка: Си, ПХП или еще что-то; не будет привязки к языку программирования.
И только не говори, что это не важно smile.gif Вот это как раз очень важно, что нет зависимости от ЯП.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
FatCat
Цитата (Valick @ 12.07.2014 - 02:59)
чисто не там где убирают, а там где не мусорят

Бывают ситуации, когда "мусорить" приходится осознанно.

Вполне реальная ситуация из движка нашего форума: очистка "мусорной корзины". Так как мусорная корзина - это такой же подфорум - удаление большого числа тем и сообщений в один клик.Если сразу удалять все "хвосты" - это непозволительно большая нагрузка. Поэтому часть "хвостов" сознательно оставляется для ежегодной генеральной уборки.

_____________
Бесплатному сыру в дырки не заглядывают...
Valick
Цитата
Например для того, чтобы дать этот номер новому дому, который там будут строить.

боюсь вы опять не угадали, там речь о свободных, а не о пропущенных
Сергей, поверьте у меня еще более бурная фантазия, чем у вас smile.gif

FatCat, при всё уважении к вам, но вы не разрабатывали форум с нуля под свои нужды, вы взяли готовый и снабдили его уникальным (а зачастую и ненужным) функционалом. Я не говорю, что это плохо, тут "хозяин барин", но нагрузка при удалении - это зачастую издержка такого подхода.

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Valick, честно говоря, я не понимаю, что ты пытаешься доказать. Я тебе говорю, что указанная задача, т.е. поиск пропущенных целых чисел среди определенного набора, выполняемая чисто средствами SQL, интересна не только гипотетически. Она может иметь реальное практическое применение. Например, в указанном мной случае, который может быть далеко не единственным.

Опять же, занимаешься словоблудием. Потому что в задаче с пропущенными номерами домов на улице "пропущенные" == "свободные", и не важно, по какой причине они были пропущены.

Итак, Valick, что же именно ты хотел доказать?
Цитата (Valick @ 12.07.2014 - 14:08)
боюсь вы опять не угадали, там речь о свободных, а не о пропущенных

Вот интересно smile.gif Что именно я "не угадал", если я сам по ходу дела придумал практическую задачу, решаемую определенными техническими средствами? Это ж "моя" задача, я сам задал для нее условия, которые озвучил тут же в теме. Что я там мог не угадать?

Ты мне что-то хочешь доказать. Наверное то, что я в чем-то неправ smile.gif В чем именно? Я могу признать свою неправоту, но только при реальных доказательствах. Жду доказательства.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата
поиск пропущенных целых чисел среди определенного набора, выполняемая чисто средствами SQL

согласен
Цитата
Это ж "моя" задача, я сам задал для нее условия

значит неверно поставленная задача, ставить перед собой правильную задачу это так же ценно как и решать задачу.
не надо притягивать за уши
Зачача распределения домов по улицам не обязательно должна решаться путём нахождения пропущенных чисел. Да и алгоритм распределения куда более сложный, не мне вам рассказвать, что иногда строится дом с номером 73, хотя по данному адресу всего три дома с номерами 5, 6 и 12. Почему 73? Почему не 1 он же пропущен. И вообще почему он пропущен? Почему не 1,2,3,4?

Выбор решения для задачи, а не определение задачи под решение не требует доказательств, это аксиома. Что вы хотите от меня словоблуда услышать? smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (Valick @ 12.07.2014 - 15:21)
значит неверно поставленная задача, ставить перед собой правильную задачу это так же ценно как и решать задачу.

Начальная задача была такая
Цитата (sergeiss @ 9.07.2014 - 18:35)
Иногда у программера появляется задача определить, какие из чисел в таблице пропущены. Это могут айдишники, это могут быть другие числа - не суть важно.

и предлагалось решить ее средствами чистого SQL, без использования возможностей ЯП.

Всё остальное (про дома и т.п.) - это просто примеры.

Еще раз повторяю: это моя задача, которую я поставил. Что именно в ней неверного? Про дома говорить не надо, я спрашиваю именно про задачу, а не про ее практическое применение.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
waldicom
Не открывая тему посмотрел на автора, на название и на кол-во ответов (было 25). Понял, что sergeiss что-то написал и теперь в теме яростно защищает свое избобретение. Почитал... Податься что-ли в екстрасенсы...

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
sergeiss
waldicom, не, как экстрасенс ты так ничего не заработаешь. Потому что я тут ничего не защищаю smile.gif А просто поделился своими соображениями по решению одной, строго определенной задачи. А "кое-кто" не понял условия задачи и решил поупражняться в "словестной изящности". Не более того.

Короче. По предмету экстрасенсорика тебе "два с минусом".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
FatCat
Цитата (Valick @ 12.07.2014 - 13:08)
нагрузка при удалении - это зачастую издержка такого подхода

Простой пример с функционалом от разработчика. В треше за месяц скапливается пара сотен тем; в этих темах примерно 1000 сообщений.
Очистка треша - это по сути 3 запроса:
- Первым запросом собираем айдишники топиков.
- Удаление из таблицы топиков по WHERE tid IN(...)
- Удаление из таблицы сообщений по WHERE topic_id IN(...)
При размере таблицы топиков под 100 К строк и таблице сообщений 500 К строк, эти 3 запроса занимают 5-15 секунд.

Но мы "забыли" аттачи. К некоторым сообщениям были прикреплены файлы. Разработчик не предусмотрел удаления аттачей. Вот и накапливается "мусор" из неудаленных аттачей. Не много, мегабайт 100 за год.

Перед удалением из таблицы сообщений искать строки с именами файлов и в цикле удалять файлы? Пробовал, время выполнения начинает приближаться к 10 минутам.

_____________
Бесплатному сыру в дырки не заглядывают...
Valick
1) Запрос. Выбираем удаляемые топики (по условию ХХХ), а точнее находим ссылки на аттачи.
2) Удаляем аттачи в соответсвии с выборкой.
3) Запрос. Удаляем топики (выбираем всё по тому же условию ХХХ) + JOIN удаляем сообщения. Ивсё это одним запросом.


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

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