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

Форум MySQL

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

 

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

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

тема: Замещение удалённых идентификаторов
 
 автор: babilonian   (23.03.2006 в 14:26)   письмо автору
 
 

Никто никогда не занимался следующей ерундой: В мускульной базе есть колонка id. Числовые значения в ней для каждой строки соответственно идут по порядку от нуля и до бесконечности. Удаляем определенный id из середины, допустим 2. Остаются id 1 и 3. А вот как при следующем добавлении новой строки в эту таблицу генерировать id, которое бы замещало ранее удаленное. В данном случае равнялось 2?
Вот такой код пришел мне в голову:

$gool=0;
$result = mysql_query("SELECT id FROM somebase ORDER BY id");
while ($row = mysql_fetch_array($result))
   {
   $gool++;
   $id=$row[id];
   if(empty($id) or $id!=$gool){$num=$gool;}
   }

Соответственно $gool – генерируемое число.
Но при всей его видимой правильности он упорно продолжает генерировать число, которое на 1 больше чем самое большое в базе. Что я здесь упустил?

   
 
 автор: Loki   (23.03.2006 в 14:36)   письмо автору
 
   для: babilonian   (23.03.2006 в 14:26)
 

А почуму она должна генерировать число, которое уже было? Ведь при этом нарушается целостность БД.

   
 
 автор: Oligarx   (23.03.2006 в 14:37)   письмо автору
 
   для: babilonian   (23.03.2006 в 14:26)
 

так делать нельзя ... если у вас поле auto_increment то ничего вы с этим не поделаете.

На ум приходит мысль сделать простое поле и самому ... присваивать id , а вот как это сделать я затрудняюсь ответить.

...... если я не прав пусть меня поправят :))

   
 
 автор: RV   (23.03.2006 в 14:38)   письмо автору
 
   для: babilonian   (23.03.2006 в 14:26)
 

А какой тип у поля id в базе?
ежели оно автоинкрементное, то вроде счет начинается с 1 а не с 0.
Попробуй вначале поставить вместо $gool=0; $gool=1;
но действительно из-за этого нарушается целостность базы. поэтому нафиг такой геморрой?
если уж хочется вставлять свое id, то делаем поле id не автоинкрементным, перед добавлением в базу делаем запрос

<?
$sql 
"SELECT MAX(user_id) AS total FROM TABLE";
$user_id $row['total'] + 1;

   
 
 автор: babilonian   (23.03.2006 в 15:43)   письмо автору
 
   для: babilonian   (23.03.2006 в 14:26)
 

Все оказалось проще. Нужно было просто подойти с другой стороны к анализу.

$num=0;
$result = mysql_query("SELECT id FROM table ORDER BY id");
while ($row = mysql_fetch_array($result))
   {
   $num++;
   $arr_id[$num]=$row[id];
   $last=$row[id]+2;
   }
for($q=0;$q<$last;$q++)
  {
  if($q!=$arr_id[$q]){$num=$q; break;}
  }

   
Rambler's Top100
вверх

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