2010-01-03 21 views
0

У меня есть форма, которая позволяет пользователям создавать новые записи,
В поле, которое является идентификатором, который автоматически увеличивается, я хочу, чтобы пользователь увидел номер записи, который эта запись каким-то образом показывает последние значение + 1 в значении полей.получить последнюю запись таблицы

Я думал что-то вроде:

<input type="text" value="<?php echo $myQuery['recordId'].length+1"/> 

Но это не работает.

Опять же, это только, чтобы получить значение по умолчанию в <input>

Вместо того, чтобы посмотреть последний идентификатор, и эта форма используется только один администратор.

+1

Что делать, если два пользователя загрузить форму в то же время? Они получат один и тот же идентификатор, но они не могут сохранить этот идентификатор. – Quentin

+0

Хороший вопрос, но это для администратора. – adardesign

+0

У вас будет такая же проблема, если администратор откроет две копии страницы в отдельных окнах/вкладках браузера. – Wyzard

ответ

1

Вы можете найти один плюс самый высокий идентификатор, выбрав его:

SELECT MAX(id)+1 FROM table 

Но, как сказал Дэвид, вы не гарантировано это будет идентификатор, который используется, потому что 2-х человек может загрузить страницу примерно в то же время.

+0

Это не удастся, если запись, которая ранее занимала наивысшее значение, была удалена. –

+0

Да, он также потерпит неудачу, если одновременно загрузится 2 страницы вставки, затем каждая из них будет заполнена. У одного будет id (max id + 1), а у другого будет id (max id + 2). –

1

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

В вашем случае вам придется вставить пустую запись в БД, прежде чем вы можете гарантировать, что он будет считать. Он оставит много пустых записей, если пользователи не будут продолжать работу, но вы можете делать очистку каждый раз, когда форма загружается удалением записей, созданных более одного часа назад, которые не имеют значения названия или что-то в этом роде.

+0

Это будет работать только в том случае, если запись действительно вставлена ​​и не удастся, если другие подключения вставили запись с тех пор. –

1

Если вам абсолютно необходимо, чтобы оно было целым числом, вы всегда можете создать специальную таблицу с одним столбцом auto_increment, вставить в нее, получить last_insert_id() и использовать это. это своего рода подражание последовательностям в оракуле. идентификаторы, которые не будут использоваться, будут потеряны, но другие проблемы, связанные с многопользовательскими сценариями, не будут возникать. Следующий код скопирован из документации mysql на information functions. Пойдите туда, чтобы прочитать обещания этого кода.

CREATE TABLE sequence (id INT NOT NULL); 
INSERT INTO sequence VALUES (0); 
UPDATE sequence SET id=LAST_INSERT_ID(id+1); 
SELECT LAST_INSERT_ID(); 

Теперь вернемся к своим собственным словам. Если это не должно быть целым числом, вы можете использовать guid. В php есть функция uniqid, и в mysql есть функция uuid. теория говорит, что даже если каждый постоянно создает команды независимо друг от друга, каждый гид будет уникальным.

Так что это один из способов сделать это:

<?php 
    $query = "select uuid()"; 
    $result = mysql_query($query); 
    $row = mysql_fetch_row($result); 
    $uuid = $row[0]; 
?> 
<input type="text" value="<?php echo $uuid; ?>"/> 
Смежные вопросы