Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - unica query
Forum - PHP - unica query

Avatar
Aangelus (Normal User)
Pro


Messaggi: 142
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 23:55
Martedì, 30/12/2014
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

PM Quote
Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 12:18
Mercoledì, 31/12/2014
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 ;) )


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 13:21
Mercoledì, 31/12/2014
Io credo invece che si possa fare. Infatti si possono definire variabili direttamente nella query usando il linguaggio SQL: http://dev.mysql.com/doc/refman/5.0/en/user-variables.html.
Quindi io farei ad esempio:
Codice sorgente - presumibilmente PHP

  1. 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
  2. @ranking := ((@ranking*@users)+9)/(@users+1)
  3. @users := @users + 1;
  4. 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.


PM Quote
Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 14:46
Mercoledì, 31/12/2014
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.


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote
Avatar
Aangelus (Normal User)
Pro


Messaggi: 142
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 1:52
Giovedì, 01/01/2015
Grazie ragazzi per l'aiuto è sono contento che stia diventando un argomento interessante anche per altri . Il bello della condivisione del sapere :D

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:09
Giovedì, 01/01/2015
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 ...
PM Quote
Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 16:50
Giovedì, 01/01/2015
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 :)


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote
Avatar
Aangelus (Normal User)
Pro


Messaggi: 142
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 22:57
Giovedì, 01/01/2015
Grazie ragazzi ;)

PM Quote