Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   пополнение бд (http://www.flasher.ru/forum/showthread.php?t=67410)

Whatsername 02.08.2005 17:00

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

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

Crazy 02.08.2005 20:02

Цитата:

Сообщение от Whatsername
либо добавлять записи в базу за две ходки.

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

nagash 02.08.2005 21:52

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

Whatsername 03.08.2005 11:46

Цитата:

Сообщение от Crazy
ЧТО ты собираешься делать с базой в ДВА запроса?

Устанавливать 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

Цитата:

Сообщение от nagash
забираешь себе ИДшник для твоих дальнейших нужд...

Оппа-на, у меня чакры открываются =))

Сперва толкаем все в базу, а потом, на основе 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

Цитата:

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

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

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

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

nagash 05.08.2005 14:49

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

Crazy 05.08.2005 15:00

Цитата:

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

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

Sloth.RU 05.08.2005 15:11

Цитата:

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

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

nagash 05.08.2005 15:25

человеку помогли успешно... ушли в пустой и непонятный флейм...


Часовой пояс GMT +4, время: 16:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.