Es mi trabajo que ejecuto cada dia jaja, mi cabeza ya se ha acostumbrado a pensar de manera logica. Nunca aceptando un hecho sino interpretando como se habrá realizado...Soy raro, vamos.
Me da pereza buscar un tutorial, te lo hago por encima aqui
Imaginate que tienes una carpeta recursos y ahi tienes las 11 imagenes. Las imagenes llevan los nombres
estrella0.jpg (0 estrellas alumbradas)
estrella5.jpg (0.5 estrellas alumbradas)
estrella10.jpg (1 estrella alumbradas)
estrella15.jpg (1.5 estrellas alumbradas)
estrella20.jpg (2 estrellas alumbradas)
estrella25.jpg (2.5 estrellas alumbradas)
etc..así hasta llegar a las 5 estrellas, buscate las estrellas
Luego tenemos una tabla mysql que recoge todas las valoraciones de un perfil, la llamaremos valoraciones
id id_perfil val
1 1 0.5
2 1 2.5
3 1 4
4 1 5.5
Para hacerlo facil asigné todas las entradas del ejemplo al mismo perfil.
La función php seria la siguiente mas o menos (tu te la ajustas)
Código PHP:
function get_val_media ($usid)
{
//Código para verificar que la id es un numero
if(!is_numeric($usid)) return false;
$usid = (int)$usid;
//Vamos a esperar 1 solo resultado, la media, por tanto limitamos a 1
$q = $mysqli->query("Select AVG(val) as media FROM valoraciones WHERE id='$usid' LIMIT 1");
//Obtenemos la media de la query
$row = $q->fetch_assoc();
$avg = $row['media'];
//Redondemos la media a medio decimal
$star = round($avg * 2) / 2;
return $star;
}
Ojo, el código lo hice aquí sobre la marcha, no está testeado y puede tener fallos (sorry)
Ahora, en el html, si no usas motor de plantilla que hace que se pase toda la información en forma de un array al html, hacemos lo siguiente, algo sucio pero si practicas está bien.
$img = get_val_media ($usid)
echo '<img src="resources/estrella'.$img.'.jpg" />';
Donde $usid es la variable del usuario del que quieres la información
Si necesitas algo más informa.