• User Newbie

    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 libri

    La 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....... 3

    Nella 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


  • User Attivo

    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!
    :ciauz:


  • User Newbie

    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_l

    A 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_l

    In 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