INSERT с записьюе инкремента в другое поле - возможно?

Sirius

PHP+MySQL=LOVE
INSERT с записьюе инкремента в другое поле - возможно?

К примеру есть таблица:
table(
id int auto_increment primary_key,
field1,
field2,
...
);

Нужно при инсерте (при определённых условиях задачи) засовывать в field1 значение id

То есть нужно так:
insert into table values ('', id , 'something'...); // где id это то значение, которое должно быть сейчас в результате инкремента

Надеюсь что понятно объяснил... Сейчас мне приходится инсертить, а потом апдейдить ласт_инсерт_ид запись - засовывая значение ласт_инсерт_ид в field1 - а это не оч. хорошо :(

Заранее спасибо!
 

KR

alive in new life
Честно говоря не очень понятно
id int auto_increment primary key это как раз то уникальное поле с помощью которого можно однозначно идентифицировать запись в таблице.

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

как раз можно использьвать твой last_insert_id() при обновлении записи, указывая его в предложении where.

или ты не о чем-то другом?
 

KR

alive in new life
все сообразил
по-моему вполне можно использовать конструкцию типа
insert into ... set field1=LAST_INSERT_ID()+1;

где LAST_INSERT_ID() - это функция не PHP, а самого мускля

начинаю тупить. похоже пора отдохнуть %)
 

Sirius

PHP+MySQL=LOVE
si - Долго объяснять для чего, но поверь универсальность этого скрипта меня уже убивает, и для универсальности нужно делать иногда то поле равным ИД.

Наверное придётся всё же апдейтить после инсерта :(
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Re: INSERT с записьюе инкремента в другое поле - возможно?

Автор оригинала: Sirius
К примеру есть таблица:
table(
id int auto_increment primary_key,
field1,
field2,
...
);

Нужно при инсерте (при определённых условиях задачи) засовывать в field1 значение id
повесь триггер BEFORE INSERT, который будет проверять условие и класть в field1 это значение. ;
 

si

Administrator
si, по каким причинам нельзя?
потому-что результат будет не всегда верный.

вот пример:
Код:
CREATE TABLE t1 (id int default 0 auto_increment, id_2 int, PRIMARY KEY(id));
CREATE TABLE t2 (id int default 0 auto_increment,PRIMARY KEY(id));
INSERT INTO t2 (id) VALUES(NULL);
INSERT INTO t1 (id,id_2) VALUES(NULL,LAST_INSERT_ID()+1);
SELECT * FROM t1;
 

KR

alive in new life
Автор оригинала: si
потому-что результат будет не всегда верный.

вот пример:
Код:
CREATE TABLE t1 (id int default 0 auto_increment, id_2 int, PRIMARY KEY(id));
CREATE TABLE t2 (id int default 0 auto_increment,PRIMARY KEY(id));
INSERT INTO t2 (id) VALUES(NULL);
INSERT INTO t1 (id,id_2) VALUES(NULL,LAST_INSERT_ID()+1);
SELECT * FROM t1;
Изменить твой пример можно таким образом:

Код:
CREATE TABLE t1 (id int default 0 auto_increment, id_2 int, PRIMARY KEY(id));
CREATE TABLE t2 (id int default 0 auto_increment,PRIMARY KEY(id));
INSERT INTO t2 (id) VALUES(NULL);
INSERT INTO t1 (id,id_2) VALUES(NULL,LAST_INSERT_ID(t1.id+1));
SELECT * FROM t1;
 
Сверху