Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/06/2016, 12:02
kukiko11
 
Fecha de Ingreso: diciembre-2015
Mensajes: 115
Antigüedad: 8 años, 4 meses
Puntos: 2
Pregunta optimizar proceso php mediante ciclos o bucles?

Código PHP:
Ver original
  1. //Buscamos toda la data relacionada con los avances del usuario para su posterior uso
  2. $user_progress=$conexion->prepare("SELECT u.points AS puntos, u.level AS reputacion, FROM usuarios u WHERE u.id=? LIMIT 1");
  3. $user_progress->bind_param('i',$user_id);
  4. $user_progress->execute();
  5. $user_progress->store_result();
  6. $user_progress->bind_result($points,$level);
  7. $user_progress->fetch();
  8.  
  9. //variables a usar
  10. $actual_value=$points;
  11. $max_value= 1000;
  12. //calculo del porcentaje de avance para alcanzar el siguiente nivel
  13. $percent = floor($actual_value*100/$max_value);
  14.  
  15. //Calculamos el nivel de reputacion del usuario y su avance basandonos en sus puntos actuales
  16.  
  17. if     ($actual_value>=1000 and $actual_value<3000)   { $max_value= 3000; $percent =  floor($actual_value*100/$max_value);   $levelup=1; }
  18. elseif ($actual_value>=3000 and $actual_value<6000)   { $max_value= 6000; $percent =  floor($actual_value*100/$max_value);   $levelup=2; }
  19. elseif ($actual_value>=6000 and $actual_value<9000)   { $max_value= 9000; $percent =  floor($actual_value*100/$max_value);   $levelup=3; }
  20. elseif ($actual_value>=9000 and $actual_value<14000)  { $max_value= 14000; $percent = floor($actual_value*100/$max_value);   $levelup=4; }
  21. elseif ($actual_value>=14000 and $actual_value<18000) { $max_value= 18000; $percent = floor($actual_value*100/$max_value);   $levelup=5; }
  22. elseif ($actual_value>=18000 and $actual_value<23000) { $max_value= 23000; $percent = floor($actual_value*100/$max_value);   $levelup=6; }
  23. elseif ($actual_value>=23000 and $actual_value<28000) { $max_value= 28000; $percent = floor($actual_value*100/$max_value);   $levelup=7; }
  24. elseif ($actual_value>=28000 and $actual_value<36000) { $max_value= 36000; $percent = floor($actual_value*100/$max_value);   $levelup=8; }
  25. elseif ($actual_value>=36000 and $actual_value<50000) { $max_value= 50000; $percent = floor($actual_value*100/$max_value);   $levelup=9; }
  26. elseif ($actual_value>=50000 and $actual_value<60000) { $max_value= 60000; $percent = floor($actual_value*100/$max_value);   $levelup=10;}
  27.  
  28. if ($level!=0) {
  29. //Subimos el nivel del usuario
  30. $update_level=$conexion->prepare("UPDATE usuarios SET level=? WHERE user=?");
  31. $update_level->bind_param('is', $levelup, $username);
  32. $update_level->execute();
  33. $update_level->close();
  34. }

estoy implementando el siguiente codigo para lo que es llevar el control del nivel de reputacion que tienen los usuarios de mi web y sus avances en forma de porcentaje... (todo esto, es calculado en base a los puntos que posean)

el codigo funciona perfectamente, sin embargo... lo he hecho bajo lo que se, y lo considero un tanto manual y rustico si se quiere... hay alguna forma de simplificar lo que alli hice mediante el uso de ciclos?

y otra duda.... al subir de nivel me gustaria guardar dicho avance en una tabla llamada 'actividad' la cual ya he creado, el detalle esta en que no se como hacer la consulta de insercion SOLO y unicamente cuando un usuario avance de nivel...