Newsgroup: it.comp.www.php
Titolo: UPDATE multipli

Ciao,
sto facendo qualche prova con php e mysql, ma mi sono arenato davanti
a quanto segue...
Ho una tabella con 3 campi (ID, Nome, Punteggio); vorrei creare un
form che mi permetta di aggiornare il campo Punteggio di tutti i
record in una volta sola. L'unica cosa che mi è venuta in mente è
quella di generare dal form tante query "UPDATE tabella ..." quanti
sono i record, ma penso (e spero!) che ci sia un metodo meno bovino...
Grazieassai

Aggiornare il campo Punteggio di tutti i record....  Intendi che vuoi
mettere lo stesso identico valore su titti i record?
Andrea

 ha scritto nel messaggio
news:b5dfc62b.03072...@posting.google.com...

UPDATE tabella SET nome_Campo = "quello.che.vuoi";
In questo modo fai l'update di tutta la tabella in una volta.
Ciao

 sono i record, ma penso (e spero!) che ci sia un metodo meno bovino...
Vedo che siamo un pò scarsini in SQL.  :-)
UPDATE tabella
SET Punteggio = valore
e lui ti imposta TUTTI i record della tabella.
Ciao
Marco

 e lui ti imposta TUTTI i record della tabella.
penso che lui chiedesse di impostare tutti i record della tabella, ma con
diversi valori...
E' un pò che ci penso, ma non ho idea di come fare..
L.

...

Beh, in effetti mi sono spiegato male... Provo a riordinare:
In effetti vorrei fare quello che dice Ljundberg, vale a dire inserire
in un sol colpo valori diversi per il campo "Punteggio", tipo
ID=1   Nome=Tizio  Punteggio=12
ID=2   Nome=Caio   Punteggio=25
ecc...
Nel caso in cui ci fossero molti nomi sarebbe scomodo inserire un
punteggio la volta. Ho provato inserendo i valori relativi ai punteggi
in un array e poi scorrerlo per aggiornare un record per volta, però
così facendo mi vengono fuori un botto di query. Pensavo quindi ad un
metodo un po' più "stiloso" per fare il tutto, ma non sono riuscito a
cavare un ragno dal buco.
Grazieprego

 ecc...
la sintassi di UPDATE non lo consente, ma potresti fare una query php 
composta, non mi è ancora mai capitato, ma potresti provare a fare in 
unico comando php tutti gli update... componi programmaticamente le 
query e poi via...
provo a scrivere un esempio scemo
$UPDquery ="UPDATE tabella SET punteggio = 100 WHERE id=1;UPDATE tabella 
SET punteggio = 300 WHERE id=2;UPDATE tabella SET punteggio = 50 WHERE 
id=4;"
e farla eseguire in blocco....
$result=mysql_query($UPDquery) or die('azz no va');
non lo so se funziona, credo che in linea teorica dovrebbe andare, io 
personalmente non ho mai provato, proverò però quanto prima visto che 
può tornare utile.
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra


Una cosa di questo genere secondo voi č fattibile ?
$conta = mysql_num_rows($query);
$score = 250;
for ($i = 0; $i < $conta; i++) {
$sql = "UPDATE Tabella SET score = $score where idplayer = $i";
$score = $score - 50;
}
sicuramente non č quello che stiamo cercando, io avrei una richiesta ancora
piů complessa, ma vorrei prima cimentarmi in questo che magari č piů
semplice...
mi sa che non funziona, ma č solo un'idea..
L.

 mi sa che non funziona, ma č solo un'idea..
e la query dove la esegui? Fai $conta assegnamenti alla variabile $sql, 
e comunque faresti $conta query, giusto?
allora č piů comodo il sistema che ho propsto, che poi č nella sostanza 
il tuo con queste modifiche:
 > $sql = "UPDATE Tabella SET score = $score where idplayer = $i";
sostituito da
$sql = $sql."UPDATE Tabella SET score = $score[$i] where idplayer = $i;";
dove $score č l'array dei punteggi da assegnare
poi fai eseguire la sequenza di update al DB, cosě con un solo comando 
esegue la sequenza di update....
e funziona ho appena provato
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra

 e funziona ho appena provato
grazie, mi hai risparmiato un pň di lavoro ed ero giunto alla stessa tua
conclusione :-)
L.



Il meglio che puoi fare - e dipende da indici e altro, non e' detto che
sia piu' rapido - e' compattare le query.
Ti arriva un array contenente coppie
	( ID, Punteggio )
A quel punto ordini per Punteggio e crei query del tipo
	UPDATE Tabella SET Punteggio = $punti
		WHERE ID IN ( $id1, $id2, $id3...);
Se per esempio hai solo 5 punteggi diversi, farai solo 5 query - ma puo'
darsi che ti costi di piu' fare 5 query con grossi set IN, piuttosto che
50 query con ID=$id.
Leonardo

 diversi valori...
Se i valori sono diversi non c'è modo se non fare tante UPDATE.
Altrimenti si può fare una cosa del genere:
UPDATE tabella
SET campo=campo+valore
Mi sembra si possa fare.
Ciao
Marco

 sia piu' rapido - e' compattare le query.
hai ragione ci avevo pensato, ma il partizionamento degli id in base ai 
punteggi a questo punto può essere più complesso del fare n query e 
inoltre nel caso pessimo (tutti punteggi differenti) si ritrova comunque 
a fare n query...
Il tuo suggerimento funziona meglio per dati con regole, forse non per i 
punteggi di un gioco...
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra