Алгоритм поиска

GEN2009

Новичок
Алгоритм поиска

Допустим в таблице у меня хрянятся числа(диктую построчно, те каждому числу соответствует свой айди):
8 10 14 16 20 22 24 и тп
Дак вот я знаю диапазон поиска, допустим он от 10 до 22(вообще у меня в диапазон всегда фиксированный), знаю что расстояние между ближайжими точками равно 2 т.е. в данном примере в искомом дипазоне у меня пропущены числа 12 и 18, дак вот вопрос заключается в том, как с помощью лишь MySQL найти одно пропущенное число(не важно какое именно)?
 

Wicked

Новичок
сдается мне, что ты что-то непотребное хочешь сотворить. Нельзя ли поподробнее, зачем тебе это понадобилось?
 

GEN2009

Новичок
Думаю вы ошибаетесь..
Это нужно для работы с деревом, когда я удаляю директорию, вставить новую надо в любое пустое место(на каждую директорию у меня максимум 1000 поддиректорий), т.е. если есть свободные места, при достигнутом максимуме(те есть максимальное число соответствующее директории в данном диапазоне, но есть "дырки"), алгоритм должен работать корректно..
 

Wicked

Новичок
что мешает после каждого удаления (образования дырки) сдвигать все последующие на -2 позиции? Примерно так делается в nested sets.
 

GEN2009

Новичок
А что тогда делать с поддиректориями??? ведь они в таком случае поменяют родителя или вообще его потеряют, лучше все же искать дырку..
 

Wicked

Новичок
1) ну как вариант - поддиректориям тоже делать set parent = parent - 2.
2) откуда вообще взялось это ограничение в 1000 ? Вообще ID принято делать автоинкрементом, и не использовать освободившиеся значения. ( PHP FAQ: MySQL. FAQ. ID. )
3) почему бы для деревянной структуры просто не использовать тот же Nested Sets?
 

GEN2009

Новичок
Если сдвигать, то верен ли этот запрос:
UPDATE some_table SET dir=dir-2 WHERE dir>'10' AND dir<'22' ???
 

chira

Новичок
сразу оговорюсь, что я не сторонник идеи поиска "дырок"
привожу пример, чисто из спортивного интереса
SQL не вернёт всех дырок, его нужно подкоректировать для граничных условий (первого и последнего значения ID)
Код:
SELECT a.id+2 as empty_id
FROM dir_list a
  LEFT JOIN dir_list b ON a.id+2=b.id
WHERE b.id IS NULL
 
Сверху