AMD_GO
13-12-2010, 15:26
Salve ragazzi, vorrei risolvere una questione in un determinato modo. Mi spiego: ho una tabella nella quale devo aggiornare, se esiste, una determinata riga; se invece non esiste, la devo aggiungere.
prendiamo per esempio la seguente tabella, con una riga già presente
key value
riga1 1 10
In pratica vorrei risolvere il tutto, se è possibile, scrivendo solo due query, cioè:
query 1)
UPDATE tabella SET value = 10 WHERE key = 1
poi utilizzo la funzione affected_rows per vedere se è stato modificato qualcosa. quindi, se è stato modificato qualcosa, ok; se invece non è stato modificato niente, devo fare un INSERT. a questo punto sorge un problema.
quindi, un pò di pseudo codice:
eseguo query 1
if ( affected_rows )
ok
else
INSERT
cosa succede? se eseguo "query 1" in pratica sto aggiornando la riga1 con value = 10, ma la riga1 ha già value = 10, quindi la tupla esiste già ma non la aggiorna e affected_rows = 0.
A questo punto si entra nell'else dove viene fatto un inserimento, ma giustamente con errore perchè mi da un duplicato di chiave.
Come risolvere in sole 2 query? è possibile? oppure dentro l'else devo fare una select per controllare che quella tupla non esista già prima di fare l'insert??? io vorrei evitare proprio questo.... oppure ancora, è possibile gestire l'errore che mi da php quando faccio l'insert con un valore di chiave duplicato???
Spero di essermi spiegato, grazie a tutti!!!!
prendiamo per esempio la seguente tabella, con una riga già presente
key value
riga1 1 10
In pratica vorrei risolvere il tutto, se è possibile, scrivendo solo due query, cioè:
query 1)
UPDATE tabella SET value = 10 WHERE key = 1
poi utilizzo la funzione affected_rows per vedere se è stato modificato qualcosa. quindi, se è stato modificato qualcosa, ok; se invece non è stato modificato niente, devo fare un INSERT. a questo punto sorge un problema.
quindi, un pò di pseudo codice:
eseguo query 1
if ( affected_rows )
ok
else
INSERT
cosa succede? se eseguo "query 1" in pratica sto aggiornando la riga1 con value = 10, ma la riga1 ha già value = 10, quindi la tupla esiste già ma non la aggiorna e affected_rows = 0.
A questo punto si entra nell'else dove viene fatto un inserimento, ma giustamente con errore perchè mi da un duplicato di chiave.
Come risolvere in sole 2 query? è possibile? oppure dentro l'else devo fare una select per controllare che quella tupla non esista già prima di fare l'insert??? io vorrei evitare proprio questo.... oppure ancora, è possibile gestire l'errore che mi da php quando faccio l'insert con un valore di chiave duplicato???
Spero di essermi spiegato, grazie a tutti!!!!