Oppure

Loading
30/12/14 22:55
Aangelus
Salve a tutti mi servirebbe un aiuto per realizzare un'unica query per prelevare un record e addizionarla alla variabile per poi aggiornarlo

io ho una tabella di nome musica con campo valutazione.

Mi servirebbe prelevare il valore del record utenti per aggiornare + 1 e il campo valutazione per creare una media con il nuovo dato e aggiornare il tutto. es.

tabella:musica

id canzone =15

utenti =10

valutazione = 8

con la nuova variabile valutazione es 9
il nuovo valore per la media sarebbe 10 X 8 = 80 + 9 = (89 / (10 + 1))= 8,09
quindi i nuovi valori sarebbero
utenti = 11 ( 10+ 1)
valutazione = 8,09

per non eseguire 2 query una di prelevamento e una di aggiornamento il cui dovrebbe essere più lenta di una sola chiedo aiuto grazie in anticipo
aaa
31/12/14 11:18
dnha
Non credo si possa fare.
Per unire due query si può usare la clausola UNION ma nel tuo caso devi compiere un operazione aritmetica sui risultati della prima: ti conviene usarne due (anche perché se progettate bene non rallentano troppo il caricamento della pagina ;) )
aaa
31/12/14 12:21
GN
Io credo invece che si possa fare. Infatti si possono definire variabili direttamente nella query usando il linguaggio SQL: dev.mysql.com/doc/refman/5.0/en/….
Quindi io farei ad esempio:
SELECT @users:='utenti', @ranking:='valutazione' FROM musica WHERE id=15; #come nell'esempio, 15 è l'id della canzone e 9 il voto che ha dato l'utente
@ranking := ((@ranking*@users)+9)/(@users+1)
@users := @users + 1;
UPDATE musica SET utenti=@users, valutazione=@ranking WHERE id=15;

Non l'ho testato quindi non sono sicuro che funzioni, comunque prova. Se è tutto ok ovviamente puoi sistemarlo sostituendo le variabili PHP al posto delle costanti 15 e 9.
aaa
31/12/14 13:46
dnha
Lo sto testando adesso e ricevo errore di sintassi alla righe 2 e 3 (ho aggiunto il dellimitatore ";" mancante in fondo alla riga 2).
Credo che alla riga 1 in realtà non assegni niente (se tolgo le righe 2 e 3) la tabella si aggiorna con utenti=0 e valutazione=0.
Comunque non conoscevo questo "trucchetto... grazie! :)

Io intanto provo a vedere se riesco a venirne a capo.
aaa
01/01/15 0:52
Aangelus
Grazie ragazzi per l'aiuto è sono contento che stia diventando un argomento interessante anche per altri . Il bello della condivisione del sapere :D
aaa
01/01/15 9:09
nessuno
Mi sembra che basti una semplice query di aggiornamento di questo tipo

UPDATE Tabella
SET Utenti = Utenti+1, Voto = (Utenti*Voto+9)/(Utenti+1)
WHERE Id=15;

Naturalmente i parametri (nuovo voto e id) dovrai passarli tu da php
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/01/15 15:50
dnha
Testata e funziona:

UPDATE musica SET utenti = utenti+1, valutazione = (utenti*valutazione+9)/(utenti+1) WHERE id=15

... direi che ho imparato qualcosa di nuovo :)
aaa
01/01/15 21:57
Aangelus
Grazie ragazzi ;)
aaa