Присвоение ID

$skip

Guest
Присвоение ID

Как сделать чтобы во при добавлении новой записи ей добавлялся ID следующий по значению после максимального уже существующего. Допустим делаем меню и хочу штобы можно было управлять порядком отображения пунктов меню. При этом я делаю запрос по ASC.
 

Demiurg

Guest
почему бы не добавить еще одно поле по которому сортировать ? ID нужен совсем не для этого.
 

DoctorD

Guest
Demiurg
а почему по айди не сортировать?
зачем еще поля?
 

$skip

Guest
по точнее можно auto_increment. ID , я думал, будет отвечать за очередь отображения. Можно вначале считать по порядку все id, потом посмотреть крайнее занчение и следующему присвоить +1. Но это цыкл и если будет большое количество информации, то займет время, а это скорость загрузки.

-~{}~ 06.08.04 11:20:

Поле можно назвать как угодно, ето для примера
 

Demiurg

Guest
DoctorD
потому что ID - это идентификатор.
Его нужно использовать только для идентификации записи.
 

DoctorD

Guest
я думал речь идет о выборке инфы из базы и выводе юзерам...

З.Ы.
слово "цыкл" это тема! =)

-~{}~ 06.08.04 14:24:

Demiurg
я понимаю, но ведь можно делать SELECT и сразу ордерить по айдишнику например, и в принципе не нужно заводить дополнительного поля

а если завести дополнительное поле, то интересно насколько существенно инфа в нем будет от айдишника отличаться ...
 

Demiurg

Guest
DoctorD
я не понимаю, в чем проблема. Если нужна сортировка, то заводи дополнительное поле и сортируй по нему, если сортировка по добавлению/изменению записи, то есть timestamp.
 

$skip

Guest
правильно, вывод ордерить по id. Но меня интересует добавление НОВОЙ записи. Т.е в базе данных уже имеются id, надо посмотреть какой максимальный и при добавлении max+1 для новой записи. Есть ли встроенная функция чтобы такое делать?
 

DoctorD

Guest
$skip
если у тебя поле типа автоинкремент то при добавлении новой записи оно само увеличется на 1цу ...

по-моему так ...

-~{}~ 06.08.04 14:33:

$skip
поставь тип поля ID в базе на автоинкремент
 

$skip

Guest
Был бы признателен если бы сказали как сделать это auto_increment
 

DoctorD

Guest
з.ы. тебе voland это сразу сказал =)

-~{}~ 06.08.04 14:39:

$skip
http://www.sql.ru/forum/actualforum.aspx
там много чего по SQL =)
 

Sefrik

Guest
Re: Присвоение ID

Автор оригинала: $skip
Как сделать чтобы во при добавлении новой записи ей добавлялся ID следующий по значению после максимального уже существующего. Допустим делаем меню и хочу штобы можно было управлять порядком отображения пунктов меню. При этом я делаю запрос по ASC.
Не знаю почему, но у меня не работает auto_increment, поэтому я сначала читаю кол-во записей из БД и это количество узнаю через функцию mysql_num_rows. Когда добавляю новость id=mysql_num_rows($query) + 1 и записываю в БД.
Смысл приблизительно такой.
 

Фанат

oncle terrible
Команда форума
Sefrik
ты делаешь неправильно.
фантастически неправильно.
и поэтому не стоит писать этого на форуме.

Вообще, программирвоание - фантастическая специальность.
Если у человека не работает машина, то он ее чинит и едет. а не ползает на карачках.
А если не работает программа, то вместо того, чтобы починитьи сделать по-человечески, "программист" изобретает чудовищную заплатку и весьма доволен собой
 

Demiurg

Guest
ужас ... не делай так.
как так не работает ? подробности где ?
 

_RVK_

Новичок
Ужас, господа. RTFM!
количество узнаю через функцию mysql_num_rows
А функция COUNT(*) для чего? SELECT COUNT(*) FROM....
Можно вначале считать по порядку все id, потом посмотреть крайнее занчение и следующему присвоить +1
А функция MAX для чего?
А ТИПЕРЬ ВНИМАНИЕ! ПОЛЕ AUTO_UNCREMENT САМО УВЕЛИЧИВАЕТ ЗНАЧЕНИЕ НА 1.
PHP:
CREATE TABLE mytable
(
id int NOT NULL auto_increment,
//Здесь остальные поля
PRIMARY KEY(id)
)
Но, это не гарантирует что значения такого поля будут идти попорядку, это гарантирует только что они будут УНИКАЛЬНЫ. Поэтому, для сортировки лучше использовать другое поля, хотя бы на случай того, что вы потом захотите изменить порядок сортировки. Поле auto_increment предназначено не для этого.
 

SiMM

Новичок
Но, это не гарантирует что значения такого поля будут идти попорядку, это гарантирует только что они будут УНИКАЛЬНЫ. Поэтому, для сортировки лучше использовать другое поля, хотя бы на случай того, что вы потом захотите изменить порядок сортировки.
Что мешает делать ORDER BY id, если ему просто нужно вывести записи в порядке их добавления в базу.
 

_RVK_

Новичок
Что мешает делать ORDER BY id, если ему просто нужно вывести записи в порядке их добавления в базу.
Ничего не мешает. Так все делают, когда не нужно будет потом изменять порядок элементов. Но нужно понимать что это поле предназначено не для сортировки, и то что его можно использовать для этого лишь полезная фича. А то потом возникнет вопрос "А как мне изменить порядок" или "Как дефрагментировать" или "Хочу чтоб увеличивалось на 10 а не на 1"....
Кстати, кто нибудь давал гарантии что в будуюих версиях MySQL автоинкрементное поле ВСЕГДА будет на 1 больше предыдущего. Ведь можно занимать ID удаленных записей....
 

SiMM

Новичок
Автор оригинала: Diesel
Кстати, кто нибудь давал гарантии что в будуюих версиях MySQL автоинкрементное поле ВСЕГДА будет на 1 больше предыдущего. Ведь можно занимать ID удаленных записей....
Разве само слово "автоинкремент" не наводит на мысли и не является самодостаточным? ID удалённых записей заниматься не может - это, ИМХО, противоречит самой сущности уникальности автоинкрементного поля (представь пользователя, который запомнил когда-то ссылку - после перехода по ней он увидит вместо ожидаемого какую-то ересь, вместо того, чтобы увидеть, что "запись удалена").
 

_RVK_

Новичок
SiMM Может ты прав. Я в пятницу, кстати, ввел число 2147483648 в автоинкрементное поле, и добавил новую запись. Таблица слетела напрочь :) теперь при добавлении новой записи, MySQL пытается добавить запись с таким же id. Не CHECK не REPAIR не помогает....
 
Сверху