Аlex
Новичок
Вставка уникального максимального значения в поле VARCHAR
Помогите составить структуру таблиц.
Должна быть таблица, одно из полей которой имеет тип VARCHAR и представляет собой некие ключи для текстов, причём заполняться оно может как автоматически (при добавлении сообщения через веб-форму), так и вручную (человеком при написании модуля).
Если поле заполняется человеком, ключи представляют собой некие фразы типа SOME_KEY. Если заполняет программа, проще всего, по-видимому, генерировать ключи в виде числовой последовательности 1, 2, 3 и т.п. Либо SOME_KEY1, SOME_KEY2 - не суть важно.
При этом возникает проблема - где каждый раз брать последнее из этих самых чисел? Делать SELECT, а потом INSERT нельзя - между этими двумя операциями кто-то может начать делать то же самое, и база нарушится. Один из вариантов такой - дополнительная таблица с полем auto_increment, которое заполняется перед каждой операцией по добавлению нового ключа, а сам номер ключа берется из mysql_insert_id()
Но это с двумя таблицами. А можно ли обойтись одним запросом? Например:
Понятно, что работать это не будет, но, надеюсь, мысль понятна - можно ли составить подобный запрос, чтобы обойтись всё-таки одной таблицей?
Помогите составить структуру таблиц.
Должна быть таблица, одно из полей которой имеет тип VARCHAR и представляет собой некие ключи для текстов, причём заполняться оно может как автоматически (при добавлении сообщения через веб-форму), так и вручную (человеком при написании модуля).
Если поле заполняется человеком, ключи представляют собой некие фразы типа SOME_KEY. Если заполняет программа, проще всего, по-видимому, генерировать ключи в виде числовой последовательности 1, 2, 3 и т.п. Либо SOME_KEY1, SOME_KEY2 - не суть важно.
При этом возникает проблема - где каждый раз брать последнее из этих самых чисел? Делать SELECT, а потом INSERT нельзя - между этими двумя операциями кто-то может начать делать то же самое, и база нарушится. Один из вариантов такой - дополнительная таблица с полем auto_increment, которое заполняется перед каждой операцией по добавлению нового ключа, а сам номер ключа берется из mysql_insert_id()
Но это с двумя таблицами. А можно ли обойтись одним запросом? Например:
PHP:
INSERT INTO table1 (keyword, text) VALUES (MAX(keyword AS INT)+1, 'text');