query di aggiornamento tabella

  • Creatore Discussione Creatore Discussione rino63
  • Data di inizio Data di inizio

rino63

Nuovo Utente
7 Apr 2015
6
0
0
Salve a tutti,

Nel mio DB tra le altre, ho queste 2 tabelle: 'brani' e 'voti'.
Nella tabella 'voti' vengono memorizzati i campi 'valore', 'idBrano' e 'idUser'.
Nella tabella 'brani' sono presenti vari campi descrittivi (titolo, autore,album, ecc...) oltre al campo 'punteggio', che è dato dalla somma dei voti (campo 'valore') ottenuti dal brano.
in PHPMyAdmin ho scritto una query per aggiornare il campo punteggio:
Codice:
UPDATE brani SET punteggio =(SELECT SUM(valore) FROM`voti`WHERE brani.idBrano =`idBrano`)
e funziona.
Ora, vorrei trovare il modo di aggiornare la pagina automaticamente, ogni volta che vengono inseriti nuovi voti,
e ho scritto questo metodo all'interno della classe 'Brano':

PHP:
public function calcola_punteggio()   {
       global $database;
     $sql = mysqli_query($database->connection, "UPDATE".self::$table_name. " SET " .$this->punteggio. " =

(SELECT SUM(valore) FROM `voti`WHERE brani.idBrano = voti.idBrano)");
     
     return  $sql;      
    }

il suddetto metodo viene chiamato all'interno della pagina 'lista_brani.php':

HTML:
<table>
        <tr>
            <th>Titolo</th>
            <th>Autore</th>
            <th>Album</th>
            <th>Anno</th>
            <th>Punteggio</th>
            <th>file</th>
            <th>Ascolta</th>
            <th>Vota</th>
        </tr>
PHP:
<?php foreach ($Brani as $brano): 
          
          ?> 
    
        <tr>
            <td><?php echo $brano->titolo;?></td>
            <td><?php echo $brano->autore;?></td>
            <td><?php echo $brano->album;?></td>
            <td><?php echo $brano->anno;?></td>
            <td><?php echo $brano->calcola_punteggio(); ?></td>
            <td><?php echo $brano->filename;?></td>
            <td><audio controls="true"><source src="../<?php echo $brano->file_path();?>"/></audio></td>
            <td><a href="vota_brano.php?idBrano=<?php echo $brano->idBrano; ?>&idUser=<?php echo $_GET['idUser']); ?>">
<button type="button">vota!</button></td></a>
        </tr>           
          <?php endforeach; ?>  
    </table>

Nel browser però la colonna punteggio rimane vuota, e non compare nessun messaggio d'errore.
Cosa Manca, o cos'è sbagliato?
Spero di essere stato chiaro, e confido nel vostro aiuto.
 
Una query di update non ritorna una selezione di record ma si limita ad aggiornare il valore di una o più colonne nella tabella indicata. Inoltre, eseguire una query per ogni riga che devi visualizzare nella tabella non è per nulla performante e rischia di produrti seri rallentamenti nella generazione della pagina.

Sarebbe inoltre utile poter leggere come popoli la variabile $Brani, magari posso suggerirti qualche idea in modo più specifico.
 
Innanzitutto grazie per l'attenzione!
Provo a spiegarmi:
In effetti il mio obiettivo sarebbe quello di aggiornare solo il campo 'punteggio' dei vari brani, e di mostrarlo poi nella pagina php attraverso il foreach, che hai visto.

La riga di codice che popola $Brani è la seguente:

PHP:
$Brani = Brano::find_all();
che fa riferimento a questo metodo nella classe "Brano":
PHP:
public static function find_all() {
		return self::find_by_sql("SELECT * FROM ".self::$table_name);
}

invece la variabile $brano è data da:
PHP:
$brano = Brano::find_by_id();

che fa riferimento al seguente metodo della classe "Brano":

PHP:
public static function find_by_id($idBrano=0) {
	  global $database;
    $result_array = self::find_by_sql("SELECT * FROM ".self::$table_name." WHERE idBrano=".$database->escape_value($idBrano)." LIMIT 1");
		return !empty($result_array) ? array_shift($result_array) : false;
}
 

Discussioni simili