|
|
|
| Извините что название темы не точное, вот что интересует:
в БД есть таблица категорий,например: prefix_mod_categories со структурой:
id,
name,
description,
id_parent
|
Категории создаются запросом:
"INSERT INTO prefix_mod_categories (id, name, description, id_parent) VALUES (NULL, '$name', '$description', '$id_parent')");
|
при создании категорий им присваиваются последовательно идентификационные номера.
Допустим создали 10 категорий, а позже за ненадобностью удалили категории с id 5,6,8,9,10.
Теперь при создании категорий им будут присваиваться id начиная с № 11, а №№ 5,6,8,9,10 так и останутся пустыми.
Можно ли этого избежать средствами БД ? Или только писать РНР-скрипт для выборки и анализа существующих id ? | |
|
|
|
|
|
|
|
для: Igorel
(17.09.2006 в 21:18)
| | Кто-то говорил, что можно с помощью пхп делать переиндексацию (сам этим не занимаюсь никогда), но имхо этого делать не надо. | |
|
|
|
|
|
|
|
для: Whi-teOoS
(17.09.2006 в 23:13)
| | Я наверно не правильно, а вернее не доконца, объяснил.
Мне не переиндексация нужна, мне надобно что б новые категории создавались, если по приведённому мной примеру, то не с 11 id, а с перврго свободного. Или хотя бы со следующего за максимальным.
Что наверное, как окажется, лучше всего :) | |
|
|
|
|
|
|
|
для: Igorel
(17.09.2006 в 21:18)
| | Нет, штатных средств нет, а для чего необходима неразрывная нумерация? Нельзя ли её эмулировать при помощи PHP-кода? | |
|
|
|
|
|
|
|
для: cheops
(18.09.2006 в 01:49)
| | >для чего необходима неразрывная нумерация?
Неразрывная нумерация нужна для защиты от нерадивых пользователей, которые категории создают, удаляют, снова создают, и т.д. и т. д.
А потом жалуются что бардак в БД.
>Нельзя ли её эмулировать при помощи PHP-кода?
Я нашёл только как создавать новую категорию с id следующим за макс. что в базе есть.
Макс. id из базы получаю след. образом:
$stroka = mysql_query("SELECT MAX(id) AS id FROM prefix_mod_categories");
print "Max id = <b>".mysql_result($stroka,0)."</b>";
|
А вот как высислять отсутствующие промежуточные id пока не нашёл :( | |
|
|
|
|
|
|
|
для: Igorel
(18.09.2006 в 02:47)
| | С бардаком не очень понятно... пользователи напряму с базой данных работают или с Web-интерфейсом? В Web-интерфейсе можно сделать так, что первичные ключи вообще нигде фигурировать не будут. | |
|
|
|
|
|
|
|
для: cheops
(18.09.2006 в 10:54)
| | cheops >пользователи напряму с базой данных работают или с Web-интерфейсом?
Всё через Web-интерфейс. Пользователь заполняет форму: название категории, её описание, указывает в какую категорию её вложить (по умолчанию главная). Эти данные передаются в запрос:
"INSERT INTO prefix_mod_categories (id, name, description, id_parent) VALUES (NULL, '$name', '$description', '$id_parent')");
|
, который и создаёт новую категорию.
Thrasher >Не разрывное следование id совсем не требуется, т.к. id не несет логической нагрузки, а требуется только для однозначной идентификации записи (строки). Если хотите какой-то логической нумерации, то создавате дополнительное поле, в кот. будете записи нумеровать в нужном вам порядке
id это название поля в котором содержатся идентификац. номера категорий, зачем создавать ещё одно поле для этой же цели ? | |
|
|
|
|
|
|
|
для: Igorel
(19.09.2006 в 09:46)
| |
id это название поля в котором содержатся идентификац. номера категорий, зачем создавать ещё одно поле для этой же цели ?
|
Совершенно верно. Вот и я про то же, что еще одно поле создавать не надо. Но и упорядочивать id тоже не надо. Понимаете, id не несет смысла каких-то номеров! Это просто уникальная метка строки таблицы, по которой ее можно однозначно выделить из таблицы, поэтому ее значение не важно. И никакого беспорядка в таблице это не создает. А если вы хотите красивой упорядоченной нумерации категорий, вот тогда и создавайте отдельное поле, но в вашем случае это не требуется. У id назначение одно - иметь уникальное значение, чтобы с этой записью могла работать база данных, а уж какое это значение - для СУБД совершенно не важно. | |
|
|
|
|
|
|
|
для: Igorel
(18.09.2006 в 02:47)
| | Не разрывное следование id совсем не требуется, т.к. id не несет логической нагрузки, а требуется только для однозначной идентификации записи (строки). Если хотите какой-то логической нумерации, то создавате дополнительное поле, в кот. будете записи нумеровать в нужном вам порядке. | |
|
|
|