Calcolare il valore massimo

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao a tutti

ho un db con due campi numerici (a, b) come posso calcolare il maggiore e visualizzarlo
nel campo Meglio?


Ecco il codice, scusate ma non mi fuoziona il tag php.

<table width="870" border= "1" align="center">
<br>
<tr>

<td width="50" bgcolor="#E1EBBB"><div align="center"><font color="#000066"><b>ID</b></font></div></td>
<td width="150" bgcolor="#E1EBBB"><div align="center"><font color="#000066"><b>DATA_PROVA</b></font></div></td>
<td width="150" bgcolor="#E1EBBB"><div align="center"><font color="#000066"><b>a</b></font></div></td>
<td width="150" bgcolor="#E1EBBB"><div align="center"><font color="#000066"><b>b</b></font></div></td>
<td width="150" bgcolor="#E1EBBB"><div align="center"><font color="#000066"><b>MEGLIO</b></font></div></td>
</tr>
<?php
$db = mysql_connect("localhost","root","");
mysql_select_db("palestra", $db);



function getQuery($Id,$a,$b) {
$query = "SELECT * FROM test WHERE ";

if (isset($Id) && !empty($Id)) {
$query .= "Id LIKE '$Id' AND ";
}


$query .= "1 = 1";

return $query;
}

$result = mysql_query(getQuery($Id,$a,$b), $db) or die ("Errore: ".mysql_error());

$i = 0;
while($myrow=mysql_fetch_array($result))

{

$bgcolor = ($i % 2 == 0 ? '#e4e4e4' : 'white');
$bgcolor = ($myrow['data_mod'] > $myrow['data_ins'] ? 'green' : $bgcolor);



echo <<<EOF
<tr bgcolor="{$bgcolor}">

<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow[Id]</a></td>
<td>$myrow[Data_prova]</td>
<td>$myrow[a]</td>
<td>$myrow</td>

</tr>

EOF;

$i++;
}


?>

</tr>
</table>
</body>
</html>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
potresti provare così

PHP:
<?php
if($myrow['a']>$myrow['b']){//a maggiore di b
	$maggiore="<td>".$myrow['a']."</td><td>&nbsp;</td>";
}elseif($myrow['a']<$myrow['b']){//b maggiore di a
	$maggiore="<td>&nbsp;</td><td>".$myrow['b']."</td>";
}else{// a uguale a b
	$maggiore="<td>".$myrow['a']."</td><td>".$myrow['b']."</td>";
}

echo <<<EOF
<tr bgcolor="{$bgcolor}">
<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow['Id']</a></td>
<td>$myrow['Data_prova']</td>
$maggiore
</tr>
EOF;
//ecc.....
?>
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
ciao

Per semplificare la cosa ho messo solo due colonne a, b in pratica sono 6.
Stavo provando con questa funzione $meglio = max($a,$b); nel mio caso con 6 colonne
sarebbe $meglio = max($a,$b,$c,$d,$e,$f); dovrebbe restituirmi il valore massimo, non riesco a farla fuozionare nella mia applicazione.
Quindi dovrei visualizzare tutte e 6 le colonne e affianco la colonna Meglio, non solo quella meglio.

echo <<<EOF
<tr bgcolor="{$bgcolor}">

<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow[Id]</a></td>
<td>$myrow[Data_prova]</td>
<td>$myrow[a]</td>
<td>$myrow</td>
<td>$myrow[c]</td>
<td>$myrow[d]</td>
<td>$myrow[e]</td>
<td>$myrow[f]</td>
$Meglio??????????

</tr>

EOF;
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
ecco alcune indicazioni
PHP:
<?php
//se sono numeri interi viene valutato il più alto
$a=7;
$b=1;
$c=18;
$d=22;//valutato il più alto
echo "il valore massimo è ".max($a,$b,$c,$d)."<br>";
//se sono misti interi e stringhe vine preso 33 in quanto zuzzerellone valutato 0
$a=7;
$b="zuzzerellone";
$c=33;//valutato il più alto
$d=22;
echo "il valore massimo è ".max($a,$b,$c,$d)."<br>";
//se sono tutte stringhe viene valutato come massimo il più "alto" alfabeticamente
$a="abaco";
$b="zuzzerellone";//valutato il più alto
$c="pinco pallo";
$d="durlindana";
echo "il valore massimo è ".max($a,$b,$c,$d)."<br>";
?>

ho provato lo script che segue e max() funzia
se i tuoi valori in $myrow['a']..... sono numeri potresti fare così

PHP:
<?php
//simulo con un array il database
$bgcolor="#cccccc";
$myrow=array(1,55,78,33,22,16,33);
//ecc...
$meglio=max($myrow);
$myrow['Data_prova']="26 settembre 2010";
$myrow['Id']="3454676";

echo <<<EOF
<table>
<tr bgcolor="{$bgcolor}">
<td><a href="apri_dettagli.php?ID={$myrow['Id']}">{$myrow['Id']}</a></td>
<td>{$myrow['Data_prova']}</td>
<td>il valore migliore è $meglio</td>
</tr>
</table>
EOF;
//ecc...
?>

l'out dello script è

3454676 26 settembre 2010 il valore migliore è 78

spero che ti servano
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao

Ho provato prima con il codice sotto e non mi da nessun risultato.

PHP:
$result = mysql_query(getQuery($Id,$a,$b), $db) or die ("Errore: ".mysql_error());

$i = 0;
while($myrow=mysql_fetch_array($result))

{
   $myrow = array($a,$b);
   $meglio = max($myrow);
    $bgcolor = ($i % 2 == 0 ? '#e4e4e4' : 'white');
    $bgcolor = ($myrow['data_mod'] > $myrow['data_ins'] ? 'green' : $bgcolor);
    


echo  <<<EOF
<tr bgcolor="{$bgcolor}">

<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow[Id]</a></td>
<td>$myrow[Data_prova]</td>
<td>$myrow[a]</td>
<td>$myrow[b]</td>
<td>$meglio </td>

</tr>

EOF;

Poi ho provato così e mi compare questo risultato  nella $meglio  = max(4.5,4.45) la funzione max non mi ha restituito il risultato.

 echo  <<<EOF
<tr bgcolor="{$bgcolor}">

<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow[Id]</a></td>
<td>{$myrow[Data_prova]}</td>
<td>$myrow[a]</td>
<td>$myrow[b]</td>
<td>$meglio = max($myrow[a],$myrow[b])</td>

</tr>

EOF;
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
forse non mi ero spiegato bene
tu hai i campi a,b,c, d.... che sono numerici (vero?)
tu estrai con la tua query tutti i campi
poi

PHP:
<?php
//ecc....
$i = 0;
while($myrow=mysql_fetch_array($result)){
	$m[]=$myrow['a'];//trasformo in array
	$m[]=$myrow['b'];
	$m[]=$myrow['c'];
	//ecc....
	$meglio = max($m);//oppure usi nell'echo direttamente la funzione
    $bgcolor = ($i % 2 == 0 ? '#e4e4e4' : 'white');
    $bgcolor = ($myrow['data_mod'] > $myrow['data_ins'] ? 'green' : $bgcolor);
	//non uso l'EREDOC perchè mi trovo meglio, eventualmente trasformi tu
	echo "<tr bgcolor=$bgcolor>";
	echo "<td><a href=\"apri_dettagli.php?ID=".$myrow['Id']."\">".$myrow['Id']."</a></td>";
	echo "<td>".$myrow['Data_prova']."</td>";
	echo "<td>".$myrow['a']."</td>";
	echo "<td>".$myrow['b']."</td>";
	echo "<td>".$myrow['c']."</td>";
	//ecc.......
	echo "<td>$meglio</td>";
	//oppure
	// echo "<td>".max($m)."</td>";//usando le funzioni in un echo è meglio scrivere "ecc".funzione()."ecc"
	//analogo discorso con gli array
	echo "</tr>";
	$i++;
}
//ecc.....
?>
piccola nota:
se non sei sicuro che nei campi a,b,c... di avere un numero (es hai sbagliato a mettere la virgola al posto del punto)
forse sarebbe bene forzare il campo a numerico
es.
$m[]=0+$myrow['b'];
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao

Funziona quasi bene, fa il controllo nella seconda riga con il maggiore della prima e così con la terza riga fa il confronto con le due precedenti.
così:

Id data a b Meglio
1 1999-10-10 20 15 20
2 2000-10-10 25 30 30
3 1996-10-09 5 7 30
4 2001-12-18 1 3 30

PHP:
while($myrow=mysql_fetch_array($result)){
      
   $m[]=$myrow['a']; 
   $m[]=$myrow['b'];
   $m[]=$myrow['c']; 
   $m[]=$myrow['d'];
   $m[]=$myrow['e']; 
   $m[]=$myrow['f'];
   
   $meglio = max($m);
   
    $bgcolor = ($i % 2 == 0 ? '#e4e4e4' : 'white');
    $bgcolor = ($myrow['data_mod'] > $myrow['data_ins'] ? 'green' : $bgcolor);
    

echo  <<<EOF
<tr bgcolor="{$bgcolor}">

<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow[Id]</a></td>
<td>$myrow[Cognome]</td>
<td>$myrow[Nome]</td>
<td>$myrow[Data_Prova]</td>
<td>$myrow[Tipo_prova]</td>
<td>$myrow[a]</td>
<td>$myrow[b]</td>
<td>$myrow[c]</td>
<td>$myrow[d]</td>
<td>$myrow[e]</td>
<td>$myrow[f]</td>
<td>$meglio</td>
</tr>

EOF;


 $i++;
 
}
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
scusa ma ho fatto un "piccolo" errore di logica.
se sai quanti sono i campi interessati metti
$m[0]=$myrow['a'];
$m[1]=$myrow['b'];
$m[2]=$myrow['c'];
$m[3]=$myrow['d'];
$m[4]=$myrow['e'];
$m[5]=$myrow['f'];

oppure subito primo o subito dopo $i++;
unset($m);

l'errore di logica è che al primo giro crea da [0] a [5] al secondo da [6] a[11] ecc... e tutti rimangono in memoria
 
Ultima modifica:

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao

C'è un piccolo particolare, ti spiego.
La tabella prove e composta da Id, nome, cognome,Data_prova, tipo_prova, a, b, c, d, e, f.
L'id non è univoco l'atleta compare in tabella più volte perche ha fatto più prove,
le prove sono diverse una salto in lungo una salto in alto una corsa, nella casella tipo_prova sono indicate con i numeri 1 2 3, salto in lungo prova 1, salto in alto 2,
corsa 3. Quindi devo calcolare il massimo per la prova 1 e 2 perchè mi serve la prova migliore, per quanto riguarda la corsa la prova migliore è quella minore.

PHP:
while($myrow=mysql_fetch_array($result)){
      
   $m[0]=$myrow['a']; 
   $m[1]=$myrow['b'];
   $m[2]=$myrow['c']; 
   $m[3]=$myrow['d'];
   $m[4]=$myrow['e']; 
   $m[5]=$myrow['f'];
   
      $bgcolor = ($i % 2 == 0 ? '#e4e4e4' : 'white');
    $bgcolor = ($myrow['data_mod'] > $myrow['data_ins'] ? 'green' : $bgcolor);
    

echo  <<<EOF
<tr bgcolor="{$bgcolor}">

<td><a href="apri_dettagli.php?ID=$myrow[Id]">$myrow[Id]</a></td>
<td>$myrow[Cognome]</td>
<td>$myrow[Nome]</td>
<td>$myrow[Data_Prova]</td>
<td>$myrow[Tipo_Prova]</td>
<td>$myrow[a]</td>
<td>$myrow[b]</td>
<td>$myrow[c]</td>
<td>$myrow[d]</td>
<td>$myrow[e]</td>
<td>$myrow[f]</td>
<td>$meglio</td>
</tr>

EOF;

unset($m); //azzera l'array.

 $i++;
 
}
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
per quanto riguarda il dato minore puoi provare così

PHP:
if($myrow['tipo_di_prova']=="corsa"){
	$meglio = min($m);
}else{
    	$meglio = max($m);
}
quello che secondo me non è giusto è l'id non univoco, comunque se vuoi terenre vicino i valori dei vari atleti potresti mettere nella querry
ORDER BY cognome, nome...
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao

Ok funziona. Per quanto riguarda l'id lo sostituisco con la data di nascita visto che ci sono molti omonimi. C'è giusto un piccolo problema nel calcolo del minimo questo perchè in alcuni casi ci sono 3 prove, es. 10,10,11,0,0,0 nei campi d,e,f che non ci sono misure mi mette lo zero e quindi la prova più bassa risulta lo zero. Il campo in mysql è di tipo double e mi mette gli zeri.
Come posso eliminarli?

Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
qui il problama è un"problemino" non da poco
se il valore 0 viene messo solo ed esclusivamente per prove non effettuate (e non in altri casi)
potresti provare a fare così


PHP:
$m[0]=$myrow['a'];
if( $myrow['a'] === 0){unset($m[0]);}
$m[1]=$myrow['b'];
if( $myrow['b'] === 0){unset($m[1]);}
$m[2]=$myrow['c'];
if( $myrow['c'] === 0){unset($m[2]);}
$m[3]=$myrow['d'];
if( $myrow['d'] === 0){unset($m[3]);}
$m[4]=$myrow['e'];
if( $myrow['e'] === 0){unset($m[4]);}
$m[5]=$myrow['f'];
if( $myrow['f'] === 0){unset($m[5]);}

in questo modo elimini dalla lista di array $m i valori zero e non vengono usati quindi nella ricerca del minimo. da verificare comunque cosa succede se hai tutti 0
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao

Funziona

ho giusto sostituito gli === con == in b,c,d,e,f e lasciato === in a.

Grazie
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Calcolare maschera di sottorete Hosting 0
S Magento 2 - Calcolare una tassa con una regola basata su proprietà di prodotto Magento 0
M [PHP] Calcolare costi su modifica orari PHP 4
diego66 [Javascript] Calcolare giorni lavorativi comprese tra due date Javascript 0
H [PHP] Ciclo per calcolare i chilometri PHP 4
A sito responsive - calcolare l'altezza document di 2 php Ajax 4
M [PHP] Calcolare se due intervalli di tempo si sovrappongono PHP 7
M Come calcolare infinite cifre di pigreco PHP 0
V Calcolare la differenza tra due date in PHP PHP 1
M Calcolare differenza temporale tra datetime salvati sui records di una tabella mysql PHP 18
Shyson Calcolare la Pasqua automaticamente Javascript 17
D Ajax per calcolare tempo di permanenza Ajax 14
C Calcolare e formattare con javascript [Form!] Javascript 6
Web Designer Come calcolare l'I.M.U. online gratuitamente Discussioni Varie 0
voldemort Hosting: come calcolare traffico mensile Hosting 0
G Calcolare la somma Javascript 3
N Calcolare dimensione di un file su un server diverso PHP 4
A calcolare prezzo medio Java 1
A calcolare l'età in automatico Javascript 2
JellyBelly Gmap - calcolare distanza fra due maker Javascript 0
G Calcolare ROI banner di AdSense del sito? Google AdSense 2
metalgemini Calcolare i minuti tra 2 celle di formato "ora" Windows e Software 2
B Calcolare Top e Left in base a Risoluzione Classic ASP 11
L Access calcolare ore e minuti MS Access 3
N Calcolare automaticamente un campo in una maschera Database 2
D Visualizzazione pagina basata sul valore di un campo del database PHP 0
D controllare valore in tabella mysql PHP 0
M Estrarre valore con SELECT COUNT PHP 0
A passara valore name da .autocomplate Javascript 2
D riempire campo inserendo un valore in un altro campo PHP 2
S riflettere valore di campo input range in live Javascript 0
R aggiornamento valore db in base all'orario PHP 1
W Mandare a capo valore di SQL Classic ASP 2
W fare la somma di un valore estratto da un ciclo while Classic ASP 0
L Ricerca valore mysql e incremento PHP 73
L pdo (stampare un valore con ritorno a funzione) PHP 0
M Problema assegnazione valore PHP 2
M Recuperare valore PHP 5
G [Javascript] Passare un valore via querystring Javascript 1
B [PHP] Valore variabile non riconosciuto PHP 1
S [ASP] SALVARE VALORE SELECT OPTION SU CAMPO TABELLA ACCESS Classic ASP 9
giusebos [PHP] radiobutton: disattivare specifico valore PHP 11
N [PHP] Estrarre singolo valore da array PHP 4
T MYSQL: valore più frequente ma con difficoltà in più... PHP 1
S aggiornare valore di un elemento xml con php PHP 8
D [PHP] Confronto valore negativo PHP 4
G [ASP] Incrementare un valore on the fly su selezione select Classic ASP 3
M [PHP] valore dentro uno shortcode PHP 0
BottyE Valore da javascript a php Javascript 2
M [PHP] valore tabella in campo form PHP 1

Discussioni simili