-
Update multiplo database
salve a tutti.
io ho una matrice $m composta da 2 colonne: Nome e Punti.
Praticamente è fatta così:
$m --- Nome --- Punti
0 ----- Pino ----- 50
1 ----- Mario --- 125
2 ----- Luigi ---- 75
(eccetera)
Poi ho una tabella nel database fatta in questo modo
Punteggi (CodP, Nome, Punti)
Contenente già delle righe. In particolare nella colonna Nome sono già presenti tutti i nomi che io ho nella matrice.
Ora, per ciascun nome nella matrice vorrei aggiornare la colonna punti con il nuovo punteggio. Quello che vorrei fare però, è poter fare il tutto in una sola query e non in N query dove N è il numero delle righe della matrice.
E' possibile? E se si come?
grazie mille
-
Certo che puoi.
Allora se ho capito bene tu hai una variabile N x 2, dove N è uguale al numero di record ( righe ) presenti nella tabella vero? dimmi se sbaglio.
Puoi aggiornare tutte le celle dell'ultima colonna in questo modo:
Codice PHP:
<?php
for (i = 0; i < $num - 1; $i++)
{
mysql_query("UPDATE nome_tabella SET Punti = " . $m[i][2] . " WHERE CodP = $i");
}
?>
$num e il numero totale di record della tabella, sai come trovarlo vero?.
Non ti assicuro che il codice vada, non l'ho provato.
-
sevenjeak, non stai rispondendo alla domanda: il tuo codice esegue comunque un numero di query pari alle righe della tabella (tra l'altro, mancando una clausola WHERE, nel database è ripetuto l'aggiornamento nel modo sbagliato).
Un modo per eseguire l'aggiornamento con una sola query esiste solo se sei in grado di ricavare i nuovi dati esclusivamente da quelli già esistenti nel database, puoi usare:
- gli altri campi della tabella
- i valori precedenti dei campi che devi aggiornare
- valori calcolati da altre tabelle, inseriti utilizzando sub-query
Dovresti però specificare pù in dettaglio come deve avvenire l'aggiornamento... altrimenti non ti si può aiutare.
Stammi bene...
-
Per la clausola where o editato il messaggio, più che altro pensavo che volesse dire come evitare di riscrivere la query per tutti i record, nel caso i record siano solo 3, scusate.