При добавлении записи в базу id не меняется.

web-investor

Постоялец
Регистрация
19 Окт 2007
Сообщения
504
Реакции
113
Здравствуйте!

Такой вопрос, у меня было в базе около 30 записей (в таблице). Я удалил 15 записей, переименовал id записей от 1 до 15, теперь когда добавляю новую запись она появляется с id=30+1, т.е. не по порядку 15, 16, 17 и т.д.
Как сделать, чтобы при добавлении записи id шло попорядку?
 
здравствуйте.
в майадмине можно посмотреть свойства таблицы
есть у нее такое свойство auto_increment

так вот
если вы удаляете записи с помощью delete, то значение автоинкремента не меняется и показывает # последней добавленной записи, даже если ее нет.

поправьте это свойство у таблицы и все будет ок
 
thoth777, а конкретно в phpmyadmin это можно увидеть? Дело в том, что я это все делал на денвере, далее сделал дамп базы и закачал на хостинг, там такая такая же беда. Похоже это значение автоинкремента переходит в дамп базы?
-------------
А, все нашел. Вот оно: "ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=34 ;" Спасибо!

А можно сделать, чтобы при удалении записи автоинкремент тоже обновлялся?
 
почему нет. можно. но только зачем?
сколько работаю в этом надобности не видел, а вот новички все пытаются эту хрень реализовать, но когда спрашиваю зачем....
 
что вы будете делать, если запись удалится не последняя, а предпоследняя, например?
имхо, парить автоинкремент - зряшное занятие.
 
согласен, зачем используете id? для уникальности записи. поэтому какая разница в его значении??и даже если будут "дырки" то на практике они могут даже пригодиться(в зависимости от назначения таблы)
 
Ситуация следующая, на сайте реализована перелинковка статей. Статьи линкуются по кругу, т.е. последняя на первую. Так вот, когда я поудалял лишние статьи, привел в порядок id (сделал по порядку от 1 до последнего), все стало нормально. Но когда добавил новую статью, у нее был id, больший, чем нужно (с учетом id удаленных статей), поэтому кольцо оборвалось.

Сейчас залил новый дамп базы с измененным "ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=34 ;" стало все нормально.
 
Ситуация следующая, на сайте реализована перелинковка статей. Статьи линкуются по кругу, т.е. последняя на первую. Так вот, когда я поудалял лишние статьи, привел в порядок id (сделал по порядку от 1 до последнего), все стало нормально. Но когда добавил новую статью, у нее был id, больший, чем нужно (с учетом id удаленных статей), поэтому кольцо оборвалось.
Сейчас залил новый дамп базы с измененным "ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=34 ;" стало все нормально.

ггг
мосье знает толк в извращениях!!!!!

вот запросы вам:
1. для первой статьи
select * from table order by id ASC limit 1;
2. для последней статьи
select * from table order by id DESC limit 1;
3. для следующей по списку статьи
select * from table where id>__текущийID__ limit 1;
4. для предыдущей по списку статьи
select * from table where id<__текущийID__ limit 1;

нет нужды извращаться с айдишниками, все решается средствами базы.
 
Через GET передается id статьи которую нужно вывести, она выводится, внизу появляется блок, в котором выводится предыдущая статья из базы (не вся статья, а заголовок, картинка и краткое описание). Вывод этой превьюшки делается следующим образом:
Код:
<? 
$d=$id-1;    //id статьи на единицу меньше выведенной
if ($d==0) {
$kon= mysql_query ("select max(id) from data",$db);
$myrow2 = mysql_fetch_array($kon);
$b=$myrow2[0];
$result = mysql_query("SELECT * FROM data WHERE id='$b'",$db);
$myrow = mysql_fetch_array($result);
echo "<img src='$myrow[mini_img]' alt='$myrow[alt]' />";
echo "<a href='view.php?id=$myrow[id]'>$myrow[title]</a><br>";
echo "$myrow[description]<br>";
}
else{
$result = mysql_query("SELECT * FROM data WHERE id='$d'",$db);
$myrow = mysql_fetch_array($result);
echo "<img src='$myrow[mini_img]' alt='$myrow[alt]' />";
echo "<a href='view.php?id=$myrow[id]'>$myrow[title]</a><br>";
echo "$myrow[description]<br><br>";
}
?>

Как я понял метод не самый лучший ))

Буду рад, если подскажите, что-то лучше.
 
и подскажу.

PHP:
<?
$d=$_GET['id']+0; //получаем айдишник текущей статьи из гета.
if ($d<2){
//если айдишник меньше или равен единице, то берем последнюю
$kon= mysql_query ("SELECT * FROM data order by id DESC limit 1",$db);
статья
}else{
//если айдишник больше единицы
$kon= mysql_query ("SELECT * FROM data WHERE id<".$d,$db); //берем предыдущую
}

//если предыдущий запрос не дал результата
if (mysql_num_rows($kon)<1){
$kon= mysql_query ("SELECT * FROM data order by id DESC limit 1",$db);
}
$myrow = mysql_fetch_assoc($kon);
echo "<img src='".$myrow['mini_img']."' alt='".$myrow['alt']."' />";
echo "<a href='view.php?id=".$myrow['id']."'>".$myrow['title']."</a><br>";
echo $myrow['description']."<br><br>";


?>

и дырки в нумерации - по барабану.
 
Назад
Сверху