powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнение ранее удалённых id
25 сообщений из 40, страница 1 из 2
Заполнение ранее удалённых id
    #36223153
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как реализовать

Задачка следующая:

Был список 100 позиций, т.е. с первого по сотый номера заняты.
Потом удалили с десятого по двадцатый. И эти номера освободились.
Далее при добавлении нумерация продолжится 101,102,103 и т.д.

Требуется заполнить номера с 10 по 20.
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223234
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Делаешь запрос SELECT id FROM table where id BETWEEN 10 AND 20
2) Смотришь, если ли записи
3) Если есть, берешь первый выбранный id
4) Состовляешь INSERT, если был найден id из пункта 3 то принудительно вставляешь его в запрос INSERT, если нет то как обычно NULL вместо id

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
$query  = 'SELECT id FROM table1 where id BETWEEN 10 AND 20';
$result = mysql_query($query);
if (mysql_num_rows($result) >  0 ) {
	$row = mysql_fetch_row($result);
	$id  = $row['id'];
} else {
	$id = 'NULL';
}
$query = 'INSERT INTO table2(id, col1, coll2) VALUES(' . $id . ', "aaa", "bbb")';
mysql_query($query);
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223243
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
table1 и table2 не нужно, это всё одна табличка, ошибся случаем
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223247
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
phpTeach,

это просто а как быть, если интервал не известен? это я для примера привёл 10 и 20
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223348
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
telalТребуется заполнить номера ...Предлагаю не заниматься такой ерундой.
Желание делать это с большой вероятностью говорит либо о неправильном проектировании БД, либо о неправильном проектировании всей разрабатываемой системы.

Если вы все-таки настаиваете, то учтите, что, на мой взгляд, не существует надежного способа занятия пропущенных номеров без блокировки всей таблицы, что не может не сказаться на производительности.
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223351
javasoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
telalphpTeach,

это просто а как быть, если интервал не известен? это я для примера привёл 10 и 20

Извините, а смысл таких манипуляций в чем заключается?
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223379
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже не вижу смысла в данной манипуляции, но по вопросу о неизвестности интервала могу предположить, что при удалении вы всё же можете сохранять информацию о id которых удаляете
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223447
alecsey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати пока читал в голове возник вопрос не подскажите как организовать Pivot в mysql? аналог ораклового
select level rn from dual connect by level <= 10
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223459
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecseyкстати пока читал в голове возник вопрос не подскажите как организовать Pivot в mysql? аналог ораклового
Код: plaintext
select level rn from dual connect by level <=  10 
Прямого эквивалента нет, ибо в MySQL нет иерархических запросов.
Но повторить результат можно с помощью переменных и большой таблицы.
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223465
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javasoft,

Это желание заказчика. Все id из таблицы выводятся в графическое отображение. Соответственно, он эти id использует для поиска. Он хочет, чтобы не было пробелов среди номеров этой таблицы. Ложные номера по порядку я не вижу смысла отображать, так как говорил ранее, они используются для поиска
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223472
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
phpTeach,

я думал, что это можно сделать sql. Но по всей видимости буду использовать возможности языка программирования
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223496
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
telalя думал, что это можно сделать sql.Да сделать-то можно. Но не нужно навешивать на суррогатный первичный ключ функциональность, ему несвойственную.
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223500
alecsey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНо повторить результат можно с помощью переменных и большой таблицы.эт понятно =) я думал малоли
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223545
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
telaljavasoft,

Все id из таблицы выводятся в графическое отображение. Соответственно, он эти id использует для поиска. Он хочет, чтобы не было пробелов среди номеров этой таблицы. Ложные номера по порядку я не вижу смысла отображать, так как говорил ранее, они используются для поиска

Строки номеруй не зависимо от id, а по порядку, ну а если надо редактировать или вывести информацию конкретного пользователя из интерфейса давай ссылку соответственно в виде ?user_id={Идентификатор}
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223639
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
phpTeach,
Строки номеруй не зависимо от id, а по порядку по какому порядку? если кто не в курсе - в sql нет понятия "номер строки".
Можно, конечно, добавить поле "типа_номер" в таблицу и сделать апдейт (переменными), чтобы новые номера по порядку первичного ключа встали. А потом повесить триггеры на добавление и удаление записей, как-то запретить изменение этого поля... Действительно, telal , оно Вам надо? Впрочем, если заказчик в данном случае ещё и хочет искать по id... то он маньяк. Вы спросите, что он захочет увидеть, когда САМ удалит чего-нибудь из "середины" списка?
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223664
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir, ORDER BY id и будет тебе номер строки
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223683
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
phpTeach,

откуда он будет, если ид-шек с 10 по 20ю нет? Выведешь ты список с "нумерацией"(ну на клиенте в датасете посчитаешь номер строки, например), а потом заказчик возьмёт и удалит с третьей по восьмую. Выведешь список заново, но под старыми номерами будут лежать другие данные . Кто виноват? Номера-то нужны без разрывов - читаем посты ТС выше!
PS. И вообще, спор "ниачём": если заказчик принципиально настаивает на своём бзике - сделать, разъяснив последствия и потребовав письменного подтверджения, что он понял, что может произойти
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223731
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir, Номер строки и идентификатор пользователя разные сущности
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223776
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за рассуждения, но кто-нибудь может резюмировать всё изложенное?
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223783
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты еще раз объясни подробнее, для чего тебе нужно чтобы id шли последовательно?
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223794
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это желание заказчика. Все id из таблицы выводятся в графическое отображение. Соответственно, он эти id использует для поиска. Он хочет, чтобы не было пробелов среди номеров этой таблицы. Ложные номера по порядку я не вижу смысла отображать, так как говорил ранее, они используются для поиска

1) Ты пишешь что в номерах не должно быть пробелов, но после удаления пробелы все равно будут пока не заполнятся
2) Как ты хочешь чтобы заполнялись пробелы после удаления, сново добавляемыми записями или последние старые записи хочешь чтобы переместились на пробелы
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223807
phpTeach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
$query  = 'SELECT * FROM table ORDER BY id';
$result = mysql_query($query);
$i      =  1 ;
while ($row = mysql_fetch_row($result)) {
	echo $i++ . ' | <a href="/?id= ' . $row['id'] . '">' . $row['name'] . '</a> | ' . $row['id'] . '<br>'; 
}
Т.е при клике на ссылку ты будешь выводить инфу о нужной записи, а если вручную хочешь писать id для поиска, то вбиваем id, который в моем примере выводится последнем значением. Идентифицировать запись по номеру строки не правильно!
Ведь вырвав страницу из блокнота ты же не будешь вставлять на место вырванных страниц новые
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223823
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
phpTeach,

Вы всё правильно перечислили.

нет смысла сдвигать id на пустые места, таблица может быть связана по этому ключу и может нарушиться целостность данных.
Думаю, нужно именно заполнять пропущенные id
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36223825
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
telal,

1. категорически присоединяюсь к всем предыдушим орателям
на предмет не надо играться с ИД, не надо!, Фу, бяка, не трожь,
брось немедлено :-)))
Кто-нибудь увидит, в лучшем случае посмеются, в худшем случае
обругают матом

2. Желание клиента -- закон, он деньги платит, кушать всем хочется, что делать?
Елементарно: Создать дополнительное поле special_id, при инсертед записывать туда
ВСЕ что заблагорасудится заказчику, хоть день рождения его тещ.

3. найти пробел в списке:
/topic/585423
...
Рейтинг: 0 / 0
Заполнение ранее удалённых id
    #36229256
telal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, я покопался в сети и наткнулся на запрос, который получает пропуски всех чисел в заданной последовательности, но проблемка, он написан на T-sql. Пожалуйста, помогите переработать его

declare @i int;

SELECT @i = MAX(pkid) FROM t1;

WITH tmp (gapId) AS (
SELECT DISTINCT a.pkid + 1
FROM t1 a
WHERE NOT EXISTS( SELECT * FROM t1 b
WHERE b.pkid = a.pkid + 1)
AND a.pkid < @i

UNION ALL

SELECT a.gapId + 1
FROM tmp a
WHERE NOT EXISTS( SELECT * FROM t1 b
WHERE b.pkid = a.gapId + 1)
AND a.gapId < @i
)
SELECT gapId
FROM tmp
ORDER BY gapId;

я так понимаю конструкции WITH ... AS в mysql нет
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнение ранее удалённых id
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]