Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как избежать "пустых записей" в БД ?
 
 автор: Igorel   (17.09.2006 в 21:18)   письмо автору
 
 

Извините что название темы не точное, вот что интересует:

в БД есть таблица категорий,например: 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 ?

   
 
 автор: Whi-teOoS   (17.09.2006 в 23:13)   письмо автору
 
   для: Igorel   (17.09.2006 в 21:18)
 

Кто-то говорил, что можно с помощью пхп делать переиндексацию (сам этим не занимаюсь никогда), но имхо этого делать не надо.

   
 
 автор: Igorel   (18.09.2006 в 00:18)   письмо автору
 
   для: Whi-teOoS   (17.09.2006 в 23:13)
 

Я наверно не правильно, а вернее не доконца, объяснил.
Мне не переиндексация нужна, мне надобно что б новые категории создавались, если по приведённому мной примеру, то не с 11 id, а с перврго свободного. Или хотя бы со следующего за максимальным.
Что наверное, как окажется, лучше всего :)

   
 
 автор: cheops   (18.09.2006 в 01:49)   письмо автору
 
   для: Igorel   (17.09.2006 в 21:18)
 

Нет, штатных средств нет, а для чего необходима неразрывная нумерация? Нельзя ли её эмулировать при помощи PHP-кода?

   
 
 автор: Igorel   (18.09.2006 в 02:47)   письмо автору
 
   для: 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 пока не нашёл :(

   
 
 автор: cheops   (18.09.2006 в 10:54)   письмо автору
 
   для: Igorel   (18.09.2006 в 02:47)
 

С бардаком не очень понятно... пользователи напряму с базой данных работают или с Web-интерфейсом? В Web-интерфейсе можно сделать так, что первичные ключи вообще нигде фигурировать не будут.

   
 
 автор: Igorel   (19.09.2006 в 09:46)   письмо автору
 
   для: 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 это название поля в котором содержатся идентификац. номера категорий, зачем создавать ещё одно поле для этой же цели ?

   
 
 автор: Thrasher   (19.09.2006 в 10:15)   письмо автору
 
   для: Igorel   (19.09.2006 в 09:46)
 


id это название поля в котором содержатся идентификац. номера категорий, зачем создавать ещё одно поле для этой же цели ?

Совершенно верно. Вот и я про то же, что еще одно поле создавать не надо. Но и упорядочивать id тоже не надо. Понимаете, id не несет смысла каких-то номеров! Это просто уникальная метка строки таблицы, по которой ее можно однозначно выделить из таблицы, поэтому ее значение не важно. И никакого беспорядка в таблице это не создает. А если вы хотите красивой упорядоченной нумерации категорий, вот тогда и создавайте отдельное поле, но в вашем случае это не требуется. У id назначение одно - иметь уникальное значение, чтобы с этой записью могла работать база данных, а уж какое это значение - для СУБД совершенно не важно.

   
 
 автор: Thrasher   (18.09.2006 в 16:36)   письмо автору
 
   для: Igorel   (18.09.2006 в 02:47)
 

Не разрывное следование id совсем не требуется, т.к. id не несет логической нагрузки, а требуется только для однозначной идентификации записи (строки). Если хотите какой-то логической нумерации, то создавате дополнительное поле, в кот. будете записи нумеровать в нужном вам порядке.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования