как узнать ID следующей записи?

mulder

Guest
как узнать ID следующей записи?

Как узнать ID записи, которая будет вставлена при следующем insert?

Или как узнать ID самой последней записи (без select)?
 

si

Administrator
Для поля auto_increment есть [m]mysql_insert_id[/m], но она вернет вам значение только ПОСЛЕ вставки записи.

Можно сделать LOCK на талицу, потом SELECT max(id) и прибавить к этому значемию +1, вставить запись, убрать лок.

Или самому делать sequence, для этого потерубуется дополнительная таблица, из 2 полей sequence_name и cnt
 

RomikChef

Guest
Это совершенно лишнее и нникогда не может понадобиться.
 

tony2001

TeaM PHPClub
открываем мануал в той части, которая касается MySQL (логично проедположить, что это там, правда?)
пробегаемся глазами по названиям функций и их кратким описаниям.
через 10 секунда максимум доходим до функции [m]mysql_insert_id[/m], которая и есть ответ на вопрос.
 

RomikChef

Guest
Тони, во-первых, это не ответ на вопрос, а во-вторых - это неправильный ответ на вопрос :)
 

mulder

Guest
Вопрос именно в том чтоб узнать этот id еще до выполнения insert.
При чем возможна ситуация, что несколько последних записей были удалены, т.е. SELECT max(id) не проходит.
 

tony2001

TeaM PHPClub
>При чем возможна ситуация, что несколько последних записей
>были удалены, т.е. SELECT max(id) не проходит.
??????
 

Krisha

Guest
Это ответ на вопрос, который мог бы быть правильным в том случае, если бы был задан вопрос для которого данный ответ есть верным. :)
 

RomikChef

Guest
Короче, я прав :)
Малдер, ты что-то делаешь неправильно.
Поясни, зачем тебе это понадобилось.

Если кто про селект макс ид скажет - убью!!! ;-)
 

tony2001

TeaM PHPClub
да убивайте меня как хотите, только в терновый куст не бросайте! =)
 

mulder

Guest
короче ситуация такая:
на сайт добавляется статья с рисунком. Рисунок uploadится из формы в которой также вноситься текст. Я хочу сохранить этот рисунок как id_статьи.jpg, чтоб не хранить лишней строки с адресом рисунка.
Вот я получил из uploadа файл, теперь нужен ИД чтоб его сохранить.
Но статьи могут удаляться из базы (хотя в принципе очень редко), т.е последний ИД (т.е. маx(id)) например равен 5, а 6 и 7 статью уже удалили, т.е. слудующий ИД реально будет 8, а совсем не 6.
Сделать сначала insert текста, и получить его ИД не проходит (вроде бы), поскольку нужно сначала проверить корректность uploada.

Короче, по-моему я уже сам понял как мне поступить.
Всем спасибо!
 

si

Administrator
При чем возможна ситуация, что несколько последних записей были удалены, т.е. SELECT max(id) не проходит.
Это почему ?
вы просто будете использовать удаленные номера повторно.

Кстати для какой базы это все надо ?
 

mulder

Guest
Автор оригинала: si

Это почему ?
вы просто будете использовать удаленные номера повторно.
Разве? Поле-то автоинкремент, т.е. если уже создали запись с ИД 5, а потом ее удалили, то следующая запись все равно будет с ИД 6
MySQL
 

si

Administrator
Разве? Поле-то автоинкремент, т.е. если уже создали запись с ИД 5, а потом ее удалили, то следующая запись все равно будет с ИД 6
MySQL
Я написал что не MySQL это будет делать я ВЫ.

Значение для auto_increment можно узнать только после инсерта, есть правда один способ через ж.. но я не буду про него говорить т.к это не правильно так делать.

Резюме:

Для auto_increment:
insert, mysql_insert_id(), если надо update этой же записи.

Без auto_increment:
1. LOCK, SELECT max(), +1, INSERT, UNLOCK
2. LOCK seq_table, SELECT cnt FROM seq_table WHERE seq_name='xxxx';cnt++;UPDATE seq_tabel;UNLOCK seq_table;

P.S Советую почитать что-нибудь про базы данных (кроме мануала mysql).
 

RomikChef

Guest
Малдер.
я одного не понимаю.
у меня все сделано, РОВНО как ты хочешь.
Получаю картинку, вставляю запись в базу данных, ПОЛУЧАЮ ид этой записи, и сохраняю картинку под этим именем.
И зачем все эти геморрои, которые ты тут развел - мне совершенно непонятно.
 

RomikChef

Guest
si, тебя губит уровень твоих знаний.
Это все равно, что посоветовать мальчику, которому надо забить гвоздь, кузнечный пресс.
Все гораздо проще.
 

RomikChef

Guest
Малдер, что еще за "корректность аплоада"?
По-русски можно?
 
Сверху