Foros del Web » Programando para Internet » PHP »

Ordenar resultado SUM en PHP

Estas en el tema de Ordenar resultado SUM en PHP en el foro de PHP en Foros del Web. Hola a todos de nuevo... Tengo un problemita, tengo dos tablas en una almaceno una serie de notas que dan los usuarios a otro usuarios ...
  #1 (permalink)  
Antiguo 12/11/2011, 05:35
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Pregunta Ordenar resultado SUM en PHP

Hola a todos de nuevo...
Tengo un problemita, tengo dos tablas en una almaceno una serie de notas que dan los usuarios a otro usuarios y a su vez sale la media.

El tema es que quiero ordenar de mayor a menos la suma de las notas de cada ususario, por ejemplo

Código:
idnota    idusuario      nota
    1              1             4.00
    2              1             3.00
    3              2             1.00
    4              2             2.00
    5              3             5.00
Eso da como resultado:
Usuario 1 = 7 / 2 = 3,50
Usuario 2 = 3 / 2 = 1,50
Usuario 3 = 5 / 1 = 5,00

La idea es ordenarlo de mayor a menor (segun el resultado), quedando:
Usuario 3 = 5,00
Usuario 1 = 3,50
Usuario 2 = 1,50

Saludos y Gracias
  #2 (permalink)  
Antiguo 12/11/2011, 11:57
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Ordenar resultado SUM en PHP

Puedes almacenar de manera independiente cada resultado (sólo el número) y luego aplicas sort
Saludos

http://mx.php.net/manual/es/function.sort.php
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #3 (permalink)  
Antiguo 12/11/2011, 13:08
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Ordenar resultado SUM en PHP

Y si los resultados los recibo con una consulta a la base de datos que a su vez está dentro de una sentencia WHILE...
¿Cómo? porque cuando aplico la funcion sort, se me crea de la siguiente forma.

resultado [0] = 3,50
resultado [0] = 1,50
resultado [0] = 5,00
  #4 (permalink)  
Antiguo 12/11/2011, 13:49
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Ordenar resultado SUM en PHP

¿Puedes mostrarnos el código que estás usando?
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 12/11/2011, 18:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Ordenar resultado SUM en PHP

También podrías ordenar los datos directamente desde la base de datos usando SQL.
  #6 (permalink)  
Antiguo 13/11/2011, 04:26
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Ordenar resultado SUM en PHP

Cita:
Iniciado por GatorV Ver Mensaje
También podrías ordenar los datos directamente desde la base de datos usando SQL.
No puedo ya que en la base de datos sumo todas las notas de X usuario y las divido por el numero de veces (para sacar la nota media)

Aquí está parte del código:
Código PHP:
while($row mysql_fetch_array($_pagi_result)){
                
$idnotusu $row['idusuarios'];
                            
                
//CONTAR TOTAL DE VOTOS POR USUARIO
                
$sql_notas mysql_query("SELECT idnota FROM nota, usuarios WHERE nota.idusuarios='$idnotusu'");
                
$tnotas mysql_num_rows($sql_notas);
                
                
//CALCULAR NOTA TOTAL
                
$sql_sumnotas mysql_query("SELECT SUM(nota) FROM nota, usuarios WHERE nota.idusuarios='$idnotusu'");
                
$tsumnnot mysql_result($sql_sumnotas,0,0);
                
                
$totalnot $tsumnnot $tnotas
  #7 (permalink)  
Antiguo 13/11/2011, 11:31
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Ordenar resultado SUM en PHP

Me refería a que nos mostraras el codigo con todo y la parte en la que aplicas la función sort para ver cómo lo haces

Saludos
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 14/11/2011, 03:02
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Ordenar resultado SUM en PHP

Aquí está con la función SORT aplicada:

Código PHP:
while($row mysql_fetch_array($_pagi_result)){
                
$idnotusu $row['idusuarios'];
                            
                
//CONTAR TOTAL DE VOTOS POR USUARIO
                
$sql_notas mysql_query("SELECT idnota FROM nota, usuarios WHERE nota.idusuarios='$idnotusu'");
                
$tnotas mysql_num_rows($sql_notas);
                
                
//CALCULAR NOTA TOTAL
                
$sql_sumnotas mysql_query("SELECT SUM(nota) FROM nota, usuarios WHERE nota.idusuarios='$idnotusu'");
                
$tsumnnot mysql_result($sql_sumnotas,0,0);
                
                if(
$tsumnnot == NULL OR ""){
                    
$totalnot 0;
                }else{
                
$totalnot $tsumnnot $tnotas;
                    
$resultado = array($totalnot);
                        
rsort($resultado);
                    foreach (
$resultado as $key => $val) {
                        echo 
"resultado[" $key "] = " $val "<br>";
                    }            
                
                } 
Como resultado me da:

resultado[0] = 3
resultado[0] = 4
  #9 (permalink)  
Antiguo 14/11/2011, 10:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Ordenar resultado SUM en PHP

El sort lo debes hacer después del while() cuando ya tengas todos tus datos listos, en este caso como estas usando un array múltple, debes de usar array_multisort.

Otra cosa, esto:
Código PHP:
Ver original
  1. if($tsumnnot == NULL OR ""){
  2.                     $totalnot = 0;
  3.                 }else{

No tiene caso, es mejor que uses empty:
Código PHP:
Ver original
  1. if (empty($tsumnnot))

Por otro lado, es mucho más fácil si lo haces desde SQL:
Código MySQL:
Ver original
  1.         (SELECT SUM(nota) FROM nota WHERE nota.idusuarios='$idnotusu') / (SELECT COUNT(*) FROM nota WHERE nota.idusuarios='$idnotusu') AS promedio
  2. FROM nota
  #10 (permalink)  
Antiguo 14/11/2011, 18:20
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Ordenar resultado SUM en PHP

Al hacerlo con multisort:
Código PHP:
while($row mysql_fetch_array($_pagi_result)){
                
$idnotusu $row['idusuarios'];
                            
                
$sql_notas mysql_query("SELECT (SELECT SUM(nota) FROM nota WHERE nota.idusuarios='$idnotusu') / (SELECT COUNT(*) FROM nota WHERE nota.idusuarios='$idnotusu') AS promedio FROM nota");
                
$totalnot mysql_result($sql_notas,0,0);
                
                
$ar1 = array($totalnot);
                
array_multisort($ar1);
                
var_dump($ar1); 
Al ejecutarlo, sale como resultado:
array(1) { [0]=> string(8) "3.000000" }
array(1) { [0]=> string(8) "4.000000" }
array(1) { [0]=> NULL }

Así que de momento en el tema de ordenarlo, estoy igual...
  #11 (permalink)  
Antiguo 15/11/2011, 11:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Ordenar resultado SUM en PHP

Como te digo el sort debes de hacerlo por fuera del while, de nada sirve que lo hagas dentro del while ya que solo tiene un valor.

Tienes que almacenar todas tus entradas en un array, y aplicarle, ya se array_multisort (si es que tienes más indices en tu array, ve los ejemplos en el manual), o sort si solo se trata de un elemento.

Saludos.
  #12 (permalink)  
Antiguo 16/11/2011, 02:30
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Ordenar resultado SUM en PHP

Hola, si pongo el sort fuera del while, no sale nada.
Os pongo el código completo:

Código PHP:
//Sentencia sql (sin limit)
                
$_pagi_sql "SELECT idusuarios, nick, nombre, fecha, pfoto, condicion, busco
                FROM usuarios
                WHERE idpermisos ='1'"
;
                    
                
//cantidad de resultados por página (opcional, por defecto 20)
                
$_pagi_cuantos $configuracion['slidetop'];

                
//Incluimos el script de paginación. Éste ya ejecuta la consulta automáticamente
                
include("paginator.inc.php");
                         
                
                
//Leemos y escribimos los registros de la página actual
                
while($row mysql_fetch_array($_pagi_result)){
                
$idnotusu $row['idusuarios'];
                            
                
$sql_notas mysql_query("SELECT (SELECT SUM(nota) FROM nota WHERE nota.idusuarios='$idnotusu') / (SELECT COUNT(*) FROM nota WHERE nota.idusuarios='$idnotusu') AS promedio FROM nota");
                
$totalnot mysql_result($sql_notas,0,0);

Como podeis ver utilizo el paginator. El número de objetos por pagina lo defino en una tabla de la base de datos.

Si pongo fuera el SORT o MULTISORT, sale lo siguiente:
array(1) { [0]=> NULL }
  #13 (permalink)  
Antiguo 16/11/2011, 10:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Ordenar resultado SUM en PHP

Lo que pasa es que debes de ir almacenando los resultados de lo que quieres mostrar en un array y posteriormente ordenarlos, por ejemplo:
Código PHP:
Ver original
  1. $scores = array();
  2. while ($row = fetch_row($sql)) {
  3.      $scores[] = $row['score'];
  4. }
  5.  
  6. sort($scores);
  7. var_dump($scores);

Es por eso que debe de ser fuera del while, cuando ya tienes todos tus resultados listos para ordenarlos.

Saludos.
  #14 (permalink)  
Antiguo 16/11/2011, 18:13
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Ordenar resultado SUM en PHP

Funciona de 10, los ordena perfectamente.

Pero... por ejemplo, ¿como puedo extraerlos y formar una tabla con ellos en forma de TOP?

Ya que el formato es:
scores[3] = 4.00000000
scores[2] = 3.00000000
scores[1] = 0.00000000

Para que quede más o menos...
POS - NOMBRE - NOTA
1º - Fulanito - 4.00
2º - Menganito - 3.00
3º - Sustanita - 0.00
...
  #15 (permalink)  
Antiguo 17/11/2011, 11:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Ordenar resultado SUM en PHP

Como te digo, en ese caso debes de asignar toda la fila por ejemplo a otro array y aplicar array_multisort para ordenar y respetar el orden de tus entradas.

Saludos.

Etiquetas: sum, tabla, resultados, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:32.