PDA

Просмотр полной версии : пополнение бд


Whatsername
02.08.2005, 17:00
я делаю каталог изданий. в числе прочих данных, необходимо хранить картинку обложки. я решил просто аплодить картинку на сервер и переименовывать файл согласно Id записи.

трабла в том, что Id не известен в момент добавления записи в таблицу. можно либо предположить его значение, либо добавлять записи в базу за две ходки. посоветуйте как лучше поступить.

Crazy
02.08.2005, 20:02
либо добавлять записи в базу за две ходки.

Сдается мне, ты не понимаешь, что делаешь. Внимание, вопрос: ЧТО ты собираешься делать с базой в ДВА запроса?

nagash
02.08.2005, 21:52
http://php.net/mysql_insert_id + автоинкремент поле

Whatsername
03.08.2005, 11:46
ЧТО ты собираешься делать с базой в ДВА запроса?
Устанавливать ID - первый шаг
На основе значения ID добавлять иные данные в эту строку - второй шаг

Спасибо, nagash, до этого места в мануле я еще не дочитал =))

stels
04.08.2005, 20:05
сказали же, используй auto_increment.
id будет назначаться автоматически, можно отправлять даже пустые значения

Whatsername
04.08.2005, 20:10
спасиб, канеш, а на какой пост ты отвечаешь? =)

stels
04.08.2005, 20:30
на оба )
всё делается в один шаг)

Whatsername
05.08.2005, 12:19
mysql_insert_id - это оч клева, несомненно, но одним шагом не обойдешься.

Вот таблица:
ID | name | pic

ID - autoincrement
name - произвольная строка
pic - путь к аплойдиной картинке, вроде /pic/12.gif. Видишь название файла? 12. А все потому, что я именую аплойденные файлы в соответствии с их ID в БД.

Так вот и получается, (шаг первый) вставляешь пустые строки в name и pic ради того, чтобы узнать последний ID, (шаг второй) реплейсишь эту строку с нужными данными (и именем файла соответственно).

nagash
05.08.2005, 12:34
=)
нет... не правильно мыслишь...
ты первым шагом ВСЁ вставляешь...
и потом узнаёшь mysql_insert_id()
всё...
забираешь себе ИДшник для твоих дальнейших нужд...

nagash
05.08.2005, 12:36
а зачем тебе в поле "пик" хранить путь до картинки?
ты же знаешь принцип по которому он образовывается "/pic/{id}.gif"
всё... ИД у тебя есть... значит ты в любой момент можешь собрать этот путь... зачем его в базе хранить-то?

Whatsername
05.08.2005, 12:42
забираешь себе ИДшник для твоих дальнейших нужд...
Оппа-на, у меня чакры открываются =))

Сперва толкаем все в базу, а потом, на основе ID, переименовываем файл и аплодим его сервер. От столбца pic можно вообще избавиться! Я правильно мыслю?

UPD: написал, не увидев твоего последнего поста =)) Спасибо большущее!

Sloth.RU
05.08.2005, 13:02
$q="select max(`имя переменной`) from `название таблицы` where `bla-bla`";//запрос с БД
...//выполнение запроса и присваивание переменной $q вывода от запроса
$q++;
==
я так понимаю трабла была в запросе теущего максимального значения в бд

nagash
05.08.2005, 13:10
Sloth.RU
пожалуйста не пиши бред...
вопрос уже решён по самому правильному пути, то, что предлагаешь ты, это бред...
представь себе ситуацию, когда одновременно два человека зашли на сайт и одновременно для обоих достался ИД твоим способом...
что в итоге получится?

при случае с mysql_insert_id автоинкремент поле уникально для сессии... и такого никогда не случиться.

на будущее, прежде чем что-то постить, прочитай целиком тред, может быть уже всё удачно разрешилось и ненадо будет пытаться показать свои "знания"

Whatsername
05.08.2005, 13:11
это тоже может быть решением, спасиб. но неприятность в том, что определение Id основывается на предположении, а не на фактах.

пуристически подход нагаша более надежен: поменять местами занесение данных в бд и прочие операции на основе последнего Id.

Sloth.RU
05.08.2005, 14:44
Sloth.RU
пожалуйста не пиши бред...
вопрос уже решён по самому правильному пути, то, что предлагаешь ты, это бред...
представь себе ситуацию, когда одновременно два человека зашли на сайт и одновременно для обоих достался ИД твоим способом...
что в итоге получится?

при случае с mysql_insert_id автоинкремент поле уникально для сессии... и такого никогда не случиться.

на будущее, прежде чем что-то постить, прочитай целиком тред, может быть уже всё удачно разрешилось и ненадо будет пытаться показать свои "знания"

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

nagash
05.08.2005, 14:49
=)
что за бред?
не поверишь! два человека!!!
но они вот решили в один и тот же момент им воспользоваться...
такая возможность имееется... значит такой способ неприемлем...

Crazy
05.08.2005, 15:00
рдновременно сточностью до милисекунды??? скока же у тебя человек заходит тада, если вероятность того, что несколько с точностью до милисекунды воспользуются этим скприптом...??

Не нужно демагогии, please. Если есть нормальное, ВСЕГДА корректно работающее решение, то незачем изобретать другое, работающее криво.

Sloth.RU
05.08.2005, 15:11
Не нужно демагогии, please. Если есть нормальное, ВСЕГДА корректно работающее решение, то незачем изобретать другое, работающее криво.

а я и не спорю что то лучше... потому что короче... я ПРОСТО предложил свое...
==
а вот насчет "а если сразу два человека..." - вот это демагогия... вероятность того, что что-то выполнится не так рана практически нулю... потому что выполнение части скрипта с выборко и помещением занимает сотые доли секунды...

nagash
05.08.2005, 15:25
человеку помогли успешно... ушли в пустой и непонятный флейм...