Newsgroup: it.comp.www.php
Titolo: calcolo media voto, help!

ragazi sono niubbo in php e mysql, ho provato a cercare una soluzione su
php.net
, 
mysql.com
 e googlato per giorni...siete la miaultima possibilita^^
Lo sript dovrebbe permettere di ottenere da un db una lista di giocatori,
creando una tabella con svariati campi:
giocatore 1   ruolo   Squadra Reale   Prezzo   N.Partite   M.voto   amm
esp
giocatore 2   ruolo   ...                      ...
giocatore 3   ruolo   ...
giocatore 4   ...
giocatore 5
giocatore 6
...
fino a media voto ottengo tutto facilmente con qualche join, il problema si
presenta col primo campo calcolato media voto, dopo aver ceracto/tentato di
tutto il massimo che riesco ad ottenere è di bloccare l'array e di ottenere
un unica riga con i valori richiesti, vi posto il codice, se serve anche la
struttura del db postero anche quella(non ne vado fierissimo^^ ma è il primo
tentativo di un autodidatta^^)
il codice:
$get_players = mysql_query("SELECT DISTINCT
a.PlayerName AS name, a.PlayerTeamID, a.PlayerPositionID,
b.PlayerPositionID, b.PlayerPositionName AS position,
c.OpponentID, c.OpponentName AS team,
a.PlayerPrice AS price,
d.StatsPlayerID, SUM(d.StatsVote) / COUNT(d.StatsVote) as mvoto
FROM tplls_players AS a
LEFT JOIN tplls_opponents AS c ON (a.PlayerTeamID = c.OpponentID)
LEFT JOIN tplls_playerpositions AS b ON (a.PlayerPositionID =
b.PlayerPositionID)
LEFT JOIN tplls_stats AS d ON (a.PlayerID = d.StatsPlayerID)
WHERE a.PlayerPositionID = b.PlayerPositionID
AND a.PlayerTeamID = c.OpponentID
AND a.PlayerID = d.StatsPlayerID
AND PlayerSeasonID = 2
GROUP BY d.StatsPlayerID
ORDER by b.PlayerPositionID", $connection)
or die(mysql_error());
$i = 0;
while($data = mysql_fetch_array($get_players))
{ $player[$i] = $data['name'];
$playerid[$i] = $data['id'];
$mvoto[$i] = $data['mvoto'];
mysql_free_result($get_players);
echo "<table width=\"800\" bgcolor=\"$inside_c\" align=\"center\">
<tr>
<td width=\"90\" bgcolor=\"$bg1\" align=\"left\">{$data['name']}<br></td>
<td width=\"90\" bgcolor=\"$bg1\"
align=\"center\">{$data['position']}<br></td>
<td width=\"70\" bgcolor=\"$bg1\" align=\"center\">Player Real Team</td>
<td width=\"70\" bgcolor=\"$bg1\" align=\"center\">{$data['price']}<br></td>
<td width=\"30\" bgcolor=\"$bg1\" align=\"center\">Partite<br></td>
<td width=\"30\" bgcolor=\"$bg2\" align=\"center\">($mvoto[$i])<br></td>
<td width=\"30\" bgcolor=\"$bg1\" align=\"center\">Goal
fatti/subiti<br></td>
<td width=\"30\" bgcolor=\"$bg1\" align=\"center\">ammo<br></td>
<td width=\"30\" bgcolor=\"$bg1\" align=\"center\">esp<br></td>
<td width=\"330\" bgcolor=\"$bg1\" align=\"center\">vuoto<br></td>
</tr></table>
";
}
Grazie in anticipo, diciamo che anche solo un'indicazione sarebbe cmq
utilissima e graditissima perche come risultera ovvio dal codice, non ho
molto ben chiaro dove mettere le mani per proseguire.
-- 
Dim Hellfire

 molto ben chiaro dove mettere le mani per proseguire.
Mi sembra tutto molto confuso. Se vuoi un po' di aiuto, chiarisci meglio
 un po' tutto: innanzitutto cosa vorresti ottenere, cosa ottieni e cosa
non ottieni. In secondo luogo ti consiglio di contestualizzare tutto:
tutto sto' popň di roba non č facilmente comprensibile senza sapere di
che stiamo parlando: che tipo tipo di gioco č? Che dati hai, come sono
organizzati e cosa vuoi ottenere?
Infine temo che tu sia off-topic, mi pare che il tuo problema sia piů
legato all'SQL che al PHP... Ad ogni modo i consigli di cui sopra
valgono anche per un post nel ng adeguato!
Delinea piů chiaramente il tuo problema, cosě sarŕ piů facile capire per
chi č in grado di darti una mano.
Ciao
-- 
Stéphane Bisinger
Webmas... well...

 chi è in grado di darti una mano.


 organizzati e cosa vuoi ottenere?
le tabelle del db sono queste:
 tplls_players (
  PlayerID int(10) unsigned NOT NULL auto_increment,
  PlayerName varchar(15) NOT NULL default '',
  PlayerTeamID tinyint(2) NOT NULL default '0',
  PlayerSeasonID tinyint(2) NOT NULL default '0',
  PlayerPositionID tinyint(1) NOT NULL default '0',
  PlayerProfile text NOT NULL,
  PlayerPrice tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (PlayerID)
tplls_stats (
  StatsPlayerID int(10) NOT NULL default '0',
  StatsSeasonID int(10) NOT NULL default '0',
  StatsMatchDate date NOT NULL default '0000-00-00',
  StatsVote tinyint(4) default NULL,
  StatsYellow tinyint(4) default NULL,
  StatsRed tinyint(4) default NULL,
  StatsGoal tinyint(4) default NULL,
  StatsID int(11) NOT NULL auto_increment,
  PRIMARY KEY  (StatsID)le altre tabele coinvolte sono semplici id, name
Per l'off topic ho gia detto, sono qui anche per quello, il fatto di essere
OT mi darebbe cmq un'indicazione da seguire, spulciare meglio tra query e
comandi sql...
Grazie in ogni caso di nuovo^^
-- 
Dim Hellfire

 }
E alla fine della fiera la variabile $i = 0; non la incrementi?
Prova a ripulire un po' il tutto con questi accorgimenti e poi vediamo
di risolvere i problemi insoluti!


 di risolvere i problemi insoluti!
Grazie come sempre anticipatamente per il tempo dedicatomi^^
-- 
Dim Hellfire
Noto su HT come:GoldHfire
Presidente dell'Atletico Borriello (236559)  in Serie: V.101 (5936)
#140 "Club dei mille"

 
Prego


        SUM(d.StatsVote) / COUNT(d.StatsVote) AS mvoto
AVG(d.StatsVote) non č meglio?
Ciao Gianfranzo

 AVG(d.StatsVote) non č meglio?
Hai ragione pure tu...


Infatti le prime prove le avevo fatte con AVG, ma inspiegabilmente non
restituiva i valori corretti...ma ora sembra che funzioni, e anche meglio di
SUM/COUNT^^...
Allora ho risolto gran parte della cosa, sicuramente il codice è brutto e la
query non stilisticamente perfetta..ma funziona, che è quel che conta alla
fine.
$sql = "SELECT DISTINCT
 a.PlayerName AS name, a.PlayerTeamID, a.PlayerSeasonID, a.PlayerPositionID,
 b.PlayerPositionID, b.PlayerPositionName AS position,
 c.OpponentID, c.OpponentName AS team,
 a.PlayerPrice AS price,
 d.StatsPlayerID, AVG(d.StatsVote) as mvoto
 FROM tplls_players AS a
 LEFT JOIN tplls_opponents AS c ON (a.PlayerTeamID = c.OpponentID)
 LEFT JOIN tplls_playerpositions AS b ON (a.PlayerPositionID =
b.PlayerPositionID)
 LEFT JOIN tplls_stats AS d ON (a.PlayerID = d.StatsPlayerID)
 WHERE a.PlayerPositionID = b.PlayerPositionID
 AND a.PlayerTeamID = c.OpponentID
 AND a.PlayerID = d.StatsPlayerID
 AND a.PlayerSeasonID = 2
 GROUP BY d.StatsPlayerID
 ORDER by b.PlayerPositionID";
$get_players = mysql_query($sql, $connection)
  or die(mysql_error());
$row[]= array();
while($data = mysql_fetch_array($get_players))
{
          $row[] = $data;
 echo "<table width=\"800\" bgcolor=\"$inside_c\" align=\"center\">
  <tr>
    <td width=\"90\" bgcolor=\"$bg1\" align=\"left\">$data[name]<br></td>
    <td width=\"90\" bgcolor=\"$bg1\"
align=\"center\">$data[position]<br></td>
    <td width=\"70\" bgcolor=\"$bg1\" align=\"center\">Player Real Team</td>
 <td width=\"70\" bgcolor=\"$bg1\" align=\"center\">price<br></td>
    <td width=\"30\" bgcolor=\"$bg1\" align=\"center\">Partite<br></td>
 <td width=\"30\" bgcolor=\"$bg2\" align=\"center\">$data[mvoto]<br></td>
 <td width=\"30\" bgcolor=\"$bg1\" align=\"center\">Goal
fatti/subiti<br></td>
 <td width=\"30\" bgcolor=\"$bg1\" align=\"center\">ammo<br></td>
 <td width=\"30\" bgcolor=\"$bg1\" align=\"center\">esp<br></td>
 <td width=\"330\" bgcolor=\"$bg1\" align=\"center\">vuoto<br></td>
  </tr></table>
";
}
In pratica, sono tornato alla vecchia query, quella postata nel primo
messaggio, utilizzando la sintassi successiva suggerita da Stéphane(mai ti
sarò sufficientemente grato^^), ora la query va perfettamente, unico
fastidio è che non restituisce righe quando il giocatore non ha preso voto,
e di conseguenza non esiste media voto.Puo dipendere dal fatto che la
colonna voto del db sia NULL?Come potrei fare per ottenere un "-" al posto
della media voto mancante, ma soprattutto ad avere anche le righe dei
giocatori senza voto nell'array?Vado a fare un po' di tentativi.
