select min(t.id) from t where t.id not in(
select t1.id from
(select t.id id from t) t1,
(select t.id id from t) t2
where t1.id = t2.id + 1 or t2.id = t1.id + 1
)
поиск наименьшего свободного id
Такая задача. В таблицу добавляются записи. Некоторые записи со временем удаляются
У каждой записи есть id. id вводится вручную (т.е. не автоинкремент). Необходимо чтобы скрипт php предлагал наименьшее свободное значение id. Подскажите более оптимизированный алгоритм
Сам использую сначала запрос select id order by id desc limit 1 потом select id order by id asc limit 1
а потом в цикле проверяю есть ли свободные id в существующем диапазоне: select * where id=$i
Заранее спасибо
Так как времени ообо нет - посмотрите на sql.ru. Это достаточно частая операция и я думаю что вы сможете найти готовое решение под свою базу, которую вы кстати указать не соизволили.
здесь есть подобное, останется только доработать напильником (вычленить минимальное значение)
можно не ходить так далеко,
Код:
Находит минимальный id, перед которорым есть пропуск нумерации.
P.S. Если это делается, чтобы заполнить промежутки в нумерации id-шников, то это довольно порочная практика, особенно в многопользовательских системах.
minus
select id as val from t
Вот все ваши дырки... выбирайте любую =)
Цитата: Zhilin Mike
select level as val from dual connect by level < #max_value#
minus
select id as val from t
Вот все ваши дырки... выбирайте любую =)
minus
select id as val from t
Вот все ваши дырки... выбирайте любую =)
Ага, только что-то мне подсказывает, что у автора совсем даже не Oracle :)