Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Проблема с ID указателями, удалением и добавлением


Автор: InfMag 12.2.2006, 21:15
Я вот только заметил, если удалить значение в базе и потом добавить новое, то все равно ID указатель не сдвигается на ряд меньше. Проблема в том, что я обнаружил такую проблему. Я удалял записи запросами, но после добавления новой записи она добавлялась не в конец, а где-то раньше, походу она встала на место удаленной записи с ее ID...
Что делать? Это недопустимо!

Автор: Kesh 12.2.2006, 21:32
InfMag, а у тебя autoincrement есть ?

Автор: InfMag 12.2.2006, 21:38
Цитата(Kesh @ 13.2.2006, 00:32)
InfMag, а у тебя autoincrement есть ?

Да

Автор: Kesh 12.2.2006, 22:49
InfMag, тогда описывай подробнее и желательно еще dump базы...

Автор: InfMag 12.2.2006, 23:23
У меня есть база из трех полей id login password, дык я позабивал рядов в ней, потом некоторые удалял, вышло
id login password
1 admin xxx
5 suxx xxx
10 sss xxx
Вобщем после добавления вот что получилось:
1 admin xxx
11 xsx xxx
5 suxx xxx
10 sss xxx
И как енто понимать?

Автор: Kefir 12.2.2006, 23:29
ну и нормально - я так понял что последний ИД был равен 10. Ты добавил запись и с авто_инкрементом появилась запись с ИД = 11. Ничего странного не вижу...

Автор: InfMag 12.2.2006, 23:42
Цитата(Kefir @ 13.2.2006, 02:29)
ну и нормально - я так понял что последний ИД был равен 10. Ты добавил запись и с авто_инкрементом появилась запись с ИД = 11. Ничего странного не вижу...

Дык я все по строчкам расписал, ты видел где именно она появилась? Она на втором уровне оказалась какого-то хрена, а не на последнем как должна была быть smile

Автор: R.M. 13.2.2006, 08:30
InfMag,
Какая разница как это выглядит в БД? Сделай такой вывод
Код

$sel = mysql_query("SELECT * FROM table ORDER BY id ASC");

смотри и радуйся что всё на своих местах.

Автор: Kefir 13.2.2006, 10:13
InfMag, id по сути своей не является номером строки в таблице. id - это просто поле, в котором хранится уникальный номер записи. Как показал Куксикус по нему можно сортировать в хронологическом порядке - это именно то чего ты хочешь, однако это частный случай запроса. Запросов много и невозможна ситуация, когда все запросы будут выдавать результсеты с одинаковой последовательностью id.

Автор: InfMag 13.2.2006, 10:17
Огромное спасибо! Просто и без гемороя smile
+1
Добавлено @ 10:28
Kefir, да я понимаю, понимаю что id это всеголиш значение, на него присвоен ключевой указатель. Я думал просто, что каждая запись в майсикуле выдается в конец...

Автор: InfMag 13.2.2006, 15:06
Так, теперь иная проблема.
Вот у меня есть список рядов в базе, после раскопок по ней ID примерно вот такие:
1
3
6
11
43
56
У меня стоит задача чтобы строчку по ID 11 сдвинуть выше, тоесть на место ряда с ID 6
Как это сделать?
Я канешь могу просто обменом значений енто зделать, используя текущий ID и отнимая от него единицу, но ID то далеко не близкие... :/

Автор: Kesh 13.2.2006, 17:43
InfMag, для сортировки задай дополнительное поле и нумеруй его...

Автор: InfMag 13.2.2006, 21:33
Kesh, тоесть каждый раз перебирать базу и пронумеровывать и не ставить аутоинцрементов?

Автор: Kefir 13.2.2006, 23:45
InfMag, немного непонятно - опиши что ты хочешь в итоге получить? куда ИД=6 сам деваться должен?

Автор: InfMag 13.2.2006, 23:58
Kesh, все, сделал! smile
Написал функцию для автонумеровки:
Код

function newsnums()
{
    $res = mysql_query("SELECT * FROM `news` ORDER BY `id` ASC");
    $i=0;
    while ($news=mysql_fetch_array($res))
    {
        $i++;
        @mysql_query("UPDATE `news` SET `n` = $i WHERE `id` = ".$news['id']." LIMIT 1");
    }
}

+1 smile

Всем спасибо, со всем разобрался...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)