id невнесенной записи

shiko

Guest
id невнесенной записи

Можно ли узнать id следующей записи в таблице, которая еще не внесена.
Т.е., допустим, я редактирую данные для внесения в базу и мне уже сейчас надо знать id, который получат эти данные при последующем внесении.
 

SeaGull

Junior Member
Как вариант:
- отправляешь пустую запись;
- получаешь её mysql_insert_id();
- делаешь update строки, уже зная её id.
 

shiko

Guest
SeaGull
Я сейчас такой же вариант использую, но у него есть один недостаток - если человек передумает добавлять данные и закроет броузер, в базе останется пустая строка (мусор). Потом его чистить надо.

А если делать так: максимальный id в базе + 1. Это надежно??
 

Oddi Cepl

Guest
А каким образом формируеться id? Если это обычный auto_increment, то вариант "максимальный id в базе + 1" видимо самый приемлимый..

только просвятите меня плз, зачем это надо?
 

azamat

Guest
только просвятите меня плз, зачем это надо?
Я могу предположить:) . У него 2 таблицы связаны по id, в обе он заносит информацию, но первой он заносит информацию в ту таблицу, для которой данный id не уникален и не auto_increment, вот ему и надо его определить.
 

Фанат

oncle terrible
Команда форума
Oddi Cepl
твоя неграмотность в русском языке равна твей неграмотности в вопросе.
давай ты воздержишься от комментариев?

shiko
А чем тебя напрягает этот мусор? Кому он мешает?
Нет, конечно же, максимальный плюс 1 - это ненадежно
 

nikish

Новичок
Проектировать базу нужно правильно, тогда не будет возникать подобных вопросов и не нужно будет придумывать разные извращенные способы как подобное осуществить.
 

shiko

Guest
В данном случае скорее логику скрипта.
Скорее всего, ты прав, но я просто пока не знаю как сделать то что мне надо по-другому. А нужно мне следующее: при добавлении статьи заранее создается папка с фотографиями К ЭТОЙ статье. Название ее и есть id статьи, поэтому и надо знать заранее. id - auto_increment.

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

Фанат

oncle terrible
Команда форума
вот мне тоже странно - фотографии добавляются до добавления статьи?
 

shiko

Guest
Почему странно??
Статья формируется в визвиге. И чтобы фотография была видна в этом визвиг-редакторе, ее ведь сначала нужно загрузить. По крайней мере мой визвиг (spaw) по-другому не позволяет. Поэтому в прцессе редактирования я уже должен знать, в какую директорию нужно загрузить фотографии.

А мусор... не окажется ли он потом боком мне. Хотя бы при подсчете количества статей в базе - ведь искаженный результат будет.
 

Фанат

oncle terrible
Команда форума
а условие при подсчете статей никак нельзя поставить, да?
 

Crazy

Developer
Автор оригинала: shiko
Поэтому в прцессе редактирования я уже должен знать, в какую директорию нужно загрузить фотографии.
...а в качестве имени каталога ты используешь id. Я угадал?

Если да, то в этом и заключается твоя проблема. Первичный ключ записи нужно использовать ТОЛЬКО для идентификации этой записи и ни в каких иных целях. В твоем случае имя каталога нужно делать отдельным полем. И проблем не будет.
 

SeaGull

Junior Member
2 shiko:
Привязывать названия файлов и каталогов заранее к ключу auto_increment действительно плохая идея. Но, раз уж так пошло, что тебе мешает исходно задавать название каталога от фонаря, а после отправки записи в базу просто переименовать каталог и делать replace() названия каталога в тексте статьи ?
 

shiko

Guest
SeaGull
что тебе мешает исходно задавать название каталога от фонаря, а после отправки записи в базу просто переименовать каталог и делать replace() названия каталога в тексте статьи ?
Но так же больше действий получается: отправляем запись в базу, переименовываем каталог, делаем реплэйс, снова отправляем... итого 4 действия вместо одного в случае с пустой записью.

Crazy
В твоем случае имя каталога нужно делать отдельным полем
И какие значения туда дописывать?? Если числовые, то это тот же id получается, если текстовые - придумывать замучаешься. Я понимаю, что приписывать вещам свойства, которые им несвойственны, плохо, но если это проще, чем другие способы, то можно попробовать.
 

Oddi Cepl

Guest
Фанат
Хамство, основанное на чувстве собственной значимости не лучшая жизненная позиция. Если я в чем-то не силен, то это и не означает, что я не стремлюсь это исправить. И будь любезен предоставь мне решать, когда, где и что говорить.

shiko
Но так же больше действий получается: отправляем запись в базу, переименовываем каталог, делаем реплэйс, снова отправляем... итого 4 действия вместо одного в случае с пустой записью.
А если просто создавать каталог, имя которого уникальным образом генерируется, например, на основе текущего времени, и при внесении записи заносить именно это имя в базу.. Кажется именно об этом ведет речь Crazy?
 

SeaGull

Junior Member
shiko
Но так же больше действий получается: отправляем запись в базу, переименовываем каталог, делаем реплэйс, снова отправляем... итого 4 действия вместо одного в случае с пустой записью.
На самом деле, 3 действия против 2-х. Replace() - это команда mysql и делается в процессе update. А в твоем варианте update всё равно делать надо. Так что, добавляется только переименование каталога. По-моему, это лучше, чем получать пустые записи в базе.

Хотя, это всё костыли. По-нормальному, как уже говорили выше Crazy и Oddi Cepl, надо действительно генерить отдельное название для каталога. Можно привязать его ко времени или логину пользователя и количеству его статей в базе.
 
Сверху