Newsgroup: it.comp.www.php
Titolo: Dire a mysql di mettere come valore in un campo il proprio ID..,

Cioe'... io ho bisogno di fare una insert del tipo:
insert into Table values (NULL,"pippo",proprio_id())
(la prima NULL e' riferita all'ID... che e' auto_increment..)
per ottenere un record del tipo
(10,"pippo",10)

 wrote in message
news:9v5cvf$3ga$1...@le.cs.unibo.it...

Prova con LAST_INSERT_ID();

 wrote in message
news:9v5cvf$3ga$1...@le.cs.unibo.it...

Non so centra, ma cerchi qualcosa come (Tabella con ID, Nome, altroID):
mysql_query("INSERT INTO tbl (ID,Nome) values ('0','pippo')") or
die(mysql_error());
$id=mysql_insert_id(); // prendi l'id appena inserito
mysql_query("UPDATE tbl SET altroId=$id WHERE ID=$id;") or
die(mysql_error());

 wrote in message
news:t6rR7.284414$sq5.13...@news.infostrada.it...

Anche cosi' potrebbe andare bene
(Infine è la stessa cosa Jurgen ?)
 mysql_query("INSERT INTO tbl (ID,Nome) values ('0','pippo')") or
die(mysql_error());
 mysql_query("UPDATE tbl SET altroId=$id WHERE ID=LAST_INSERT_ID();
") or
 die(mysql_error());
Ciao

 (Infine è la stessa cosa Jurgen ?)
Stessa cosa, forse piu' efficiente... :)


insert into Table values (NULL,"pippo",proprio_id())
Non funziona concettualmente. PRIMA dell'INSERT, SQL non sa quale sia
l'ID di quel record; DOPO, lo sa... ma e' troppo tardi.
Puoi ovviare cosi':
INSERT INTO tabella (campo1, wid) VALUES ("pippo", -1);
UPDATE tabella SET wid=id WHERE wid=-1;
Questo inoltre funziona non solo su MySQL.
Leonardo
-- 
And where the black and corkscrew towers climb
Lost and athirst the ragged pack abides,
Old as the aeons, trapped in tombs of time,
Sailing the tortuous temporal tides...

 wrote in message
news:065e1usk10trjlps8...@4ax.com...

Consideranto il campo ID non incrementale.
Poi cosa significa wid=id,
questo id lo devi sempre recuperare con una $id=mysql_insert_id() o con una
LAST_INSER_ID() direttamente nella query di Update ?
Su SqlServer e altri DB è la stessa cosa, o no?

 va in
giro a dire:

basta che fai un insert del tipo ('','pippo',proprio_id())
Cioč, se lasci vuoto il capo dell'auto_increment fa tutto lui.
 ------------------------------------
 Il peccato di Caino
 La seduzione del male
 
www.vampiripavia.com
-------------------------------------
                *IcarusDream*
  -Dove un sogno č ancora libero-

LAST_INSER_ID() direttamente nella query di Update ?
Basta che il campo riservato all'ID sia un int(3) not null
auto_increment.
Poi la lunghezza la scegli tu.Se conti di inserire più di 999 record
metti 4 al posto di 3.
 ------------------------------------
 Il peccato di Caino
 La seduzione del male
 
www.vampiripavia.com
-------------------------------------
                *IcarusDream*
  -Dove un sogno è ancora libero-


Non capisco, quella funzione proprio_id() da dove salta fuori??

Non capisco, quella funzione proprio_id() da dove salta fuori??
Bho, era nell'esempio proposto da chi ha aperto il topic.
se il recordset č composto da un int(3) not null auto_increment e da
un altri campi qualsiasi l'insert deve essere:
inserto into table values('','pippo','pluto','paperino',...)
Dove il primo campo č lasciato vuoto. 


Allora... avevo gia' risolto con la soluzione proposta della doppia query...
INSERT e UPDATE..
Volevo sapere (e non ho capito bene questa LAST_INSERT_ID()) se e' possibile
fare il tutto con una query unica....
Comunque grazie a tutti per le risposte!

 wrote in message
news:9v7jqc$o4s$2...@le.cs.unibo.it...

 mysql_query("INSERT INTO tbl (ID,Nome) values ('0','pippo')") or
die(mysql_error());
 mysql_query("UPDATE tbl SET altroId=$id WHERE ID=LAST_INSERT_ID();
") or
 die(mysql_error());
Con una query unica non è possibile, puoi  evitare di fare questo:
$id=mysql_insert_id(); per poi mettere il valore dell'Id nella query di
UPDATE

Su SqlServer e altri DB è la stessa cosa, o no?
Dipende da di che cosa parliamo... CHE COSA e' la "stessa cosa"?


 ...zac, abbiamo un record, quello di Mario, che contiene fuffa.
Attenzione!!!
Questo NON E' VERO finche' lo fai nella stessa sessione di una connessione
mySQL! Invece potrebbe verficarsi con i SELECT MAX() se non usi dei LOCK
TABLE;
Dal manuale mysql: [...] The last ID that was generated is maintained in the
server on a per-connection basis. It will not be changed by another client.
It will not even be changed if you update another AUTO_INCREMENT column with
a non-magic value (that is, a value that is not NULL and not 0). If you
insert many rows at the same time with an insert statement, LAST_INSERT_ID()
returns the value for the first inserted row. The reason for this is so that
you it makes it possible to easily reproduce the same INSERT statement
against some other server. If expr is given as an argument to
LAST_INSERT_ID(), then the value of the argument is returned by the
function, is set as the next value to be returned by LAST_INSERT_ID() and
used as the next auto_increment value. This can be used to simulate
sequences: First create the table:

mySQL!
Whoa. Oggi proprio non carburo, eh? :-)
Leonardo (che per altro usa PostgreSQL)


| id       | int(11) |      | MUL | NULL    | auto_increment |
| nome  | text    | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
mysql> select id,nome,id as id2 from test;
+----+-------+-----+
| id | nome  | id2 |
+----+-------+-----+
|  1 | pippo |   1 |
|  2 | pippo |   2 |
|  3 | pippo |   3 |
+----+-------+-----+
3 rows in set (0.01 sec)

Scusate ma non è possibile mettere due colonne autoincrement nella stessa
tabella ??
ALTER TABLE nome_tablle ADD COLUMN secondo_id int etc etc ?
Ma poi, uno che cazz se ne fa di una tabella fatta in quel modo se basta
fare una query tipo:
select id,boh,id as secondo_id from tabella
per avere la stessa colonna due volte ma con nomi diversi ?
J

 Ma poi, uno che cazz se ne fa di una tabella fatta in quel modo se basta
Infatti, tra teoria e pratica c'e' un mondo... :)

Mi serve in un forum per identificare l'id del primo post di un thread


Bon, allora farei la doppia query ed e' aposto cosi...
:))