Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    277

    Recuperare id dell'ultima insert

    Ciao ragazzi.

    Ho un problema che dovrebbe essere abbastanza comune, quindi mi raffido a voi per risolverlo.

    Il problema è classico: in una tabella TAB1 (TAB1_ID, E_MAIL) creo una nuova riga facendo la insert:

    "insert into TAB1 select UUID() as TAB1_ID, 'ciccio@ciccio.com' as E_MAIL";

    poi ho una tabella TAB2, che è in foreign key sulla TAB2 attraverso TAB1_ID. Vorrei fare delle insert anche sulla TAB2, così:

    "insert into TAB2( `TAB1_ID` , `ATTRIBUTO1`) VALUES(LAST_INSERT_ID(),'0');"

    dove LAST_INSERT_ID mi dovrebbe recuperare l'uuid() della prima query.

    Ho però due problemi:

    1. Il last_insert_id mi recupera un id diverso dalla prima. Sicuramente perché essendo eseguito dopo utilizza diversa connessione (è così?). Se questo è il problema, allora:

    2. Come far eseguire le due query con la stessa connessione e recuperare quindi LAST_INSERT_ID in modo corretto ?

    Grazie mille

  2. #2
    dopo la query insert usa:

    $last_id = mysql_insert_id($connessione);

    questa legge l'ultimo id autoincrement inserito dalla connessione in corso. Va eseguito subito dopo l'insert

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    277
    Ti ringrazio.

    Purtroppo però TAB1_ID è di tipo VARCHAR(128) e non un intero AUTOINCREMENT. Quindi purtroppo $last_id = 0 ...

  4. #4
    Originariamente inviato da davidl77
    Ti ringrazio.

    Purtroppo però TAB1_ID è di tipo VARCHAR(128) e non un intero AUTOINCREMENT. Quindi purtroppo $last_id = 0 ...
    lo stesso discorso vale anche per last_insert_id(). se l'id non e' autoincrement dovrai leggere tu l'id che hai inserito con una query.


    ma sei sicuro che questo insert-select funzioni?

    "insert into TAB1 select UUID() as TAB1_ID, 'ciccio@ciccio.com' as E_MAIL";

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    277
    Ciao.

    Si l'insert select funziona correttamente, lo uso in più parti in vari script.

    Come mi suggerisci di leggere l'ID?

    Io pensavo a:
    1.) Eseguo:

    $qy = "select UUID() from TAB1";
    $result = mysql_query($qy, $MyConn);
    $Values = mysql_fetch_array($result);
    $ID = $Values[$Result];

    2.) "insert into TAB1 select$ID as TAB1_ID, 'ciccio@ciccio.com' as E_MAIL";

    3.) "insert into TAB2( `TAB1_ID` , `ATTRIBUTO1`) VALUES($ID,'0');


    Mi sembra un po' 'bovino' però, anche se funzionante... secondo te si può fare di meglio?

  6. #6
    UUID() rende un valore univoco sopponendolo univoco universale.

    Se lo vuoi replicare devi prima leggerlo e poi inserirlo. Non e' assolutamente bovino.... forse e' piu' bovino e' usare UUID() come chiave primaria. Any way....

    per l'insert mi sono espresso male... non se "funziona", ma se e' "utile" a qualcosa.... in altre parole serve a nulla.

    codice:
    insert into TAB1 (TAB1_ID, E_MAIL)
    values ('$ID', 'ciccio@ciccio.com')

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da davidl77
    codice:
    $qy = "select UUID() from TAB1";
    $result = mysql_query($qy, $MyConn);
    $Values = mysql_fetch_array($result);
    $ID = $Values[$Result];
    occhio che e' errato....

    codice:
    $qy = "select UUID()";
    $result = mysql_query($qy, $MyConn);
    $Values = mysql_fetch_row($result);
    $ID = $Values[0];

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    277
    grazie mille!!

    Comunque l'utilizzo dell'UUID sembra insensato perché la tabella reale non è questa.

    Supponi però di usare una tabella con dei movimenti (ad es. fatture, etc.). Allora in questo caso è sensato generare la chiave del record con un ID...

  9. #9
    Originariamente inviato da davidl77
    grazie mille!!

    Comunque l'utilizzo dell'UUID sembra insensato perché la tabella reale non è questa.

    Supponi però di usare una tabella con dei movimenti (ad es. fatture, etc.). Allora in questo caso è sensato generare la chiave del record con un ID...
    Non vedo la ragione ... una fattura ha un suo numero/anno che la rende univoca, un id (numerico autoincrement) che identifica il record in modo univoco e ti permette di ordinare i record in ordine di inserimento secondo la chiave primaria.

    UUID() utilizza il timestamp della richiesta + altri particolari legati al pc/os. Non da nessuna garanzia particolare. Lo potresti sempre inserire come attributo UNIQUE ma non avendo un ordine logico poco servirebbe come indice di chiave primaria. Praticamente potresti fare un hash con MD5() di un id numerico autoincrement e sarebbe la stessa cosa.

    Saprai ben tu quello che ti serve....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.