При добавлении записывать ID не только в поле ID

Shasoft

Новичок
При добавлении записывать ID не только в поле ID

Есть такая таблица:
ID - INT AUTOINCREMENT
NAME - TEXT
FROMID - INT

Нужно добавить запись и в поле FROMID записать значение ID.

Сейчас делаю так:
INSERT INTO t_objects (NAME) VALUES ('Дом')
$id=mysql_insert_id();
UPDATE t_objects SET FROMID={$id} WHERE ID={$id}
А есть ли способ сделать это в одну команду? А то как-то некрасиво выглядит.
 

Shasoft

Новичок
Это не важно для ответа, но дублирование это частный случай. Вообще в поле FROMID будет храниться ссылка на объект (т.е. строку с данными), с которого был скопирован текущий объект(текущая строка). Если это не копия, а оригинал, то ссылка должна быть на саму себя.
 

Shasoft

Новичок
Нет, так как при показе списка объектов пользователю нужно все объекты, скопированные с одного и того же выводить на соседних строках. Сортировка по FROMID при выборе из БД с этим справляется самым лучшим и быстрым способом.
 

Shasoft

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

Фанат

oncle terrible
Команда форума
ага, а один запрос вместо десяти было бы еще красивее.
давайте вест сайт выводить одним запросом - и авторизацию, и контент, и рекламу, и опросы.
красота наступит полная.
 

Shasoft

Новичок
Вывод: данную хотелку реализовтаь НЕВОЗМОЖНО.
Тему можно закрывать.
 

DiMA

php.spb.ru
Команда форума
все возможно
только надо данные хранить так, чтобы минимизировать кол-во обращений
 

Shasoft

Новичок
Именно так и сделано. :)
Так как при таком подходе нужно 2 запроса при ДОБАВЛЕНИИ.
А при показе пользователю всё делается в один запрос.
Добавление будет гораздо реже выборки для показа.
 

Shasoft

Новичок
*****
Это такой хитрый ответ "Я знаю как это сделать, но вам не скажу"?
 

Фанат

oncle terrible
Команда форума
это такой хитрый ответ "не надо забивать себе голову глупостями".
чем проще твои инструменты, тем больше ты можешь сделать. не надо хотеть от инструмента, чтобы он тебе плясал, вязал и кофе заваривал. есть у тебя средства решить задачу - решай. а не изобретай специальный инструмент для твоего конкретного случая.
вот ведь блин у всех разработчиков комплекс неполноценности. "ах, моя фигня еще такое не умеет". в результате фигня вырастает из небольшого удобного инструмента в неповоротливого монстра. форкается. и все начинается сначала.
 

Shasoft

Новичок
А её можно прям в запрос вставлять?

-~{}~ 29.01.09 12:02:

*****
>вот ведь блин у всех разработчиков комплекс неполноценности. "ах, моя фигня еще такое не умеет"
Это является комплексом неполноценности, только если такой функционал в проекте НЕ нужен.
Если он будет использоваться, то это называется правильное проектирование.
 

IIIEPJIOK

Новичок
"ах, моя фигня еще такое не умеет". в результате фигня вырастает из небольшого удобного инструмента в неповоротливого монстра. форкается. и все начинается сначала.
опастность такого исхода есть конечно :)

А её можно прям в запрос вставлять?
конечно...
VALUES('Dom', last_insert_id() +1)
 

Shasoft

Новичок
last_insert_id() возвращает предыдущее значение. И мы к нему прибавляем 1, чтобы получить текущее значение.

А не может так получиться, что после вызова last_insert_id, но до выполнения INSERT другой пользователь сделает свой INSERT?
Или это всё выполняется как ОДНА операция и между ними ничего другого вклиниться не может?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Shasoft
Если он будет использоваться, то это называется правильное проектирование.
Запись дублирующих данных никогда «правильным проектированием» называтся не будет.
 

IIIEPJIOK

Новичок
Shasoft
Слух, на самом деле я тебе фигню посоветовал.....
Сначала сказал, потом подумал и решил почитать документацию :)
 
Сверху