Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/08/2017, 20:47
Avatar de Thejuanjo
Thejuanjo
 
Fecha de Ingreso: mayo-2014
Mensajes: 28
Antigüedad: 10 años, 7 meses
Puntos: 2
Respuesta: SQL AVG con condición

He encontrado una solución que es esta (sólo el principio del código, lo demás es irrelevante):

Cita:
$rank = mysqli_query($mysqli,"SELECT *,
max(`status`) as ast,
avg(`time`) as `media`
FROM $server_db.times WHERE `time` < (SELECT max(`time`) FROM $server_db.`times` WHERE `status` != 2) && `time` > (SELECT min(`time`) FROM $server_db.`times` WHERE `status` != 2)
&& `status` != 2 GROUP by `name` ORDER by `media` ASC LIMIT 28");
while(mysqli_num_rows($rank)>0 && $rankw = mysqli_fetch_array($rank)){
$mTimer = mysqli_query($mysqli,"SELECT * FROM $server_db.`times` WHERE `name` = '".$rankw['name']."' order by `time` ASC LIMIT 1");
while(mysqli_num_rows($mTimer) >0 && $mintimw = mysqli_fetch_array($mTimer)){$mintim = $mintimw['time'].'-';}
Pero me gustaría saber si existe la manera directa de hacerlo, ya que mi manera puede que tarde más o tenga mas carga para el servidor... la cosa es que esta información se actualiza al insertar los tiempos automáticamente mediante ajax así que no quiero colapsar el server con este tipo de código.

Y sí, uso de nuevo una función $mTimer para ver el mejor tiempo (el más bajo). Ya que lo que hace este código es imprimirme en una div la clasificación de los primeros 28 participantes ordenados por la media (average) y también muestra el mejor tiempo (single) de cada uno.