- Home
- Categorie
- Coding e Sistemistica
- Coding
- Update tra 2 tabelle con calcolo media
-
Update tra 2 tabelle con calcolo media
Buongiorno a tutti,
vi chiedo aiuto perché sto cercando di creare un semplice sistema di votazione per i lettori di una biblioteca (php/mysql).
Ho 2 tabelle voti e libriLa prima raccoglie i voti espressi dagli utenti
ID_V... ID_L... STIL... CONT... ORIG... SCOR
01...... 01...... 5....... 4.......... 4....... 5
02...... 02...... 4....... 3.......... 3....... 5
03...... 01...... 5....... 3.......... 3....... 3Nella seconda vorrei fare per ogni libro la media aggiornabile di ciascuna voce
ID_V... ID_L... STIL... CONT... ORIG... SCOR
01......
02......Riesco a fare la query di select per visualizzare ciascuna media, ma non riesco proprio a creare l'update per aggiornare la tabella libri.
Mi potete dare una mano?
Grazie
-
Ciao divi e benvenuto sul forum GT,
non sono sicuro di aver capito esattamente il problema che riscontri. Comunque, se riesci a calcolare la media dalla prima tabella stai a buon punto!Nella seconda query dovrai fare solo una query di UPDATE del tipo:
UPDATE seconda_tabella SET media=valore_medio_calcolato WHERE ID=nn LIMIT 1
con ovvio significato dei nomi (spero!). Il LIMIT è sintatticamente superfluo ma serve per metterti al riparo da possibili UPDATE di massa.
Facci sapere se risolvi!
-
Ciao Ceccus, grazie della risposta. Riepilogo velocemente
Se voglio vedere nella tabella 1 ("voti") la media per esempio del campo "stil" faccio:
1) SELECT id_l, round(AVG(stil)) as mediaStil FROM 'voti' WHERE status='1' group by id_lA questo punto vorrei che il valore "mediaStil" ottenuto venisse inserito nel campo "stil" nella tabella 2 ("libri"):
2) SELECT libri.id_l, round(AVG(voti.stil)) as mediaStil FROM libri LEFT JOIN voti ON libri.id_l = voti.id_l WHERE voti.status='1' GROUP BY libri.id_lIn questo modo però io ovviamente (è una select) visualizzo, *non aggiorno *che è il mio obiettivo.
La tua query di update mi sembra chiara, però se non ho capito male si riferisce solo a ciascun record della tabella 2 ("libri"): ossia dovrei ripeterla manualmente "n" volte, tante quanti sono i record della tabella.
Quello che ti chiedo è: non c'è un modo che mi permetta di aggiornare in un colpo solo ogni media di ogni record della tabella 2 ("libri") con il valore medio calcolato ("mediastil")?
Insomma, trovare il corrispettivo update della select 2)?Grazie ancora