Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885

    recupero id da tabella che ha effettuato un UPDATE

    ciao a tutti , mi trovo di fronte ad un dubbio.
    Ho provato a guardare se ci fosse nel forum un problema come il mio ma non ho trovato nulla.

    Io ho la necessità di dover salvare un id in una variabile, per poi scriverla in un file.

    Possiedo 2 tipi di query , una Insert e l'altra Update (ovviamente sono condizionate, se il record è già esistente aggiorna altrimenti lo inserisce).

    per recuperare l'id no volevo scrivere una query aggiuntiva, ma volevo usare una funzioncina per estrapolare l ultimo id lavorato.

    per Insert non ci sono problemi, ho utilizzato mysql_last_id(); che recupera l ultimo id selezionato , ma per UPDATE esiste qualcosa del genere???

    grazie delle risposte

  2. #2
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    beh.. la query di update è LEGGERMENTE (eufemismo) condizionata dall'uso dell'id.. quindi se fai l'update lo sai qual'è l'id..

    o non ho capito la cosa?

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    no, credo lui intenda recuperare l'id della riga aggiornata nel caso di update tipo "where email = '$email'"

    Non si puo' senza una query aggiuntiva. Anzi, meglio prima recuperare l'id, e dopo fare l'update con quel id.

  4. #4
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    Originariamente inviato da bubi1
    no, credo lui intenda recuperare l'id della riga aggiornata nel caso di update tipo "where email = '$email'"

    Non si puo' senza una query aggiuntiva. Anzi, meglio prima recuperare l'id, e dopo fare l'update con quel id.
    esattamente.. io possiedo 2 valori, ma non l'id del record.
    Quindi aggiorno il record prendendo 2 campi univoci.

    in effetti sarebbe meglio recuperarlo prima, almeno potrei avere un ulteriore condizione.

    Il fatto e che sto lavorando su progetti di altri, e quindi meno tocco meglio è

    per ora una volta aggiornato recuper l'id con una select e come condizione i campi che ho preso per aggiornare...

    Volevo sapere se esisteva una funzione simile a quella per l'inserimento dei dati ... anche se avevo già poche speranze :master:
    cmq vi ringrazio delle risposte ...

    ciao!

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Come ti è già stato detto temo proprio non sia possibile recuperare l'id dell'ultimo record aggiornato senza ricorrere a un'ulteriore query.

    Ti posto una possibile soluzione:

    codice:
    set @uid := 0;
    update tabella set campo = 'x', id = (select @uid := id)
    where altro_campo = 'y' limit 1; 
    select @uid;
    Spero ti sia d'aiuto.

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da tapu
    per ora una volta aggiornato recuper l'id con una select e come condizione i campi che ho preso per aggiornare...
    Sbagliato. Devi recuperare PRIMA gli id con i valori vecchi, non dopo con i valori nuovi. Altrimenti troverai anche le righe che avevano GIA' i valori nuovi, e quindi non sono state aggiornate.

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da nicola75ss
    Spero ti sia d'aiuto.
    Così le query sono tre....

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da luca200
    Sbagliato. Devi recuperare PRIMA gli id con i valori vecchi, non dopo con i valori nuovi. Altrimenti troverai anche le righe che avevano GIA' i valori nuovi, e quindi non sono state aggiornate.
    Precisazione...
    quello che ho scritto vale solo se il campo che modifichi è lo stesso che usi nella where. Altrimenti è indifferente farlo prima o dopo.

    Però c'è un'altra cosa da considerare: dovresti usare un lock in scrittura sulla tabella, altrimenti rischi teoricamente di "incrociarti" con una operazione simultanea che lavora sugli stessi valori

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.