Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Agrupar por nombre en Top 10 en PHP y MySQL

Estas en el tema de Agrupar por nombre en Top 10 en PHP y MySQL en el foro de Mysql en Foros del Web. Buen día, con el siguiente código logro que php me haga una lista de los 10 registros ordenados con el puntaje más alto, el problema ...
  #1 (permalink)  
Antiguo 03/03/2011, 17:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Agrupar por nombre en Top 10 en PHP y MySQL

Buen día, con el siguiente código logro que php me haga una lista de los 10 registros ordenados con el puntaje más alto, el problema es que cuando los agrupo con "group by" para que no me salga repetido el nombre del jugador, en lugar de mostrarme el puntaje mas alto del jugador "x" me muestra su primer registro que tuvo en mysql ordenados obviamente de mayor a menor, pero yo quiero que me muestre el registro mas alto de cada jugador sin repetirse y obviamente ordenado de mayor a menor, les agradecería me orientaran como podría modificar mi código.


Código PHP:
<?php
 $conection 
mysql_connect("localhost","usuario","pass") or die("no se puede conectar a SQL Server");
mysql_select_db("nombretabla",$conection);
//aca los ordeno de mayor a menor y solo muestro 10
$todos "SELECT * from puntaje ORDER BY puntos DESC LIMIT 0,10";  
?>
//y aca los imprimo
<table >
<?
 $result 
mysql_query$todos );
 while( 
$row mysql_fetch_array$result ) )
     {
 
?>
           <tr>
           <td ><? echo $row['idfacebook'?></td>
           <td ><? echo $row['nombre'?></td>
           <td ><? echo $row['puntos'?></td>
            <td ><? echo $row['nivel'?></td>
            </tr> <?
        
?>                   
            </table>
<?  mysql_close$conection );  ?>
  #2 (permalink)  
Antiguo 03/03/2011, 18:11
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

Alguien que sepa ?
  #3 (permalink)  
Antiguo 03/03/2011, 18:14
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

intenta usando MAX(campo_de_puntaje)

http://dev.mysql.com/doc/refman/5.0/es/example-maximum-column-group.html
  #4 (permalink)  
Antiguo 03/03/2011, 18:38
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

Cita:
Iniciado por arepavieja Ver Mensaje
intenta usando MAX(campo_de_puntaje)

http://dev.mysql.com/doc/refman/5.0/es/example-maximum-column-group.html
Me muestra solo un nombre de usuario pero apesar de tener MAX no me da su puntaje más alto de cada usuario me da su primer registro.

Código PHP:
$todos "SELECT idfacebook,nombre,puntos,nivel, MAX(puntos) from puntaje GROUP BY nombre ORDER BY puntos DESC LIMIT 0,10"
  #5 (permalink)  
Antiguo 03/03/2011, 18:49
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

y como estas imprimiendo los resultados?
  #6 (permalink)  
Antiguo 03/03/2011, 18:55
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

OK Despues de MAX (puntos) agregando un "AS puntos" logre que me los ordenara por nombre tomando el puntaje más alto pero en la fila donde esta el registro del puntaje mas alto tambien hay una columna que se llama "nivel" y apesar que el puntaje si me toma el registro mas alto el nivel registrado en esa misma fila no coincide con el que me muestra ejemplo:
Código PHP:
$todos "SELECT idfacebook,nombre,puntos,nivel, MAX(puntos) from puntaje GROUP BY nombre ORDER BY puntos DESC LIMIT 0,10"
//DATOS MUESTRA
NOMBRE PUNTOS NIVEL

PACO 10 1
LAURA 345 8
MEMO 40 3
PACO 245 6
LAURA 4 2
MEMO 578 9


// al hacer la consulta Con max me muestra esto

NOMBRE PUNTOS NIVEL

MEMO 578 3
LAURA 345 2
PACO 245 1

// CUANDO DEBERIA MOSTRARME LO SIGUIENTE

NOMBRE PUNTOS NIVEL

MEMO 578 9
LAURA 345 8
PACO 245 6

Como logro que coincida su fila de registro? no podría usar un MAX ahi tambien pues puede tener un registro de puntos alto y no ser su nivel mas alto que ha jugado.
  #7 (permalink)  
Antiguo 03/03/2011, 19:01
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

bueno, por lo que veo mientras mas puntos hay, más nivel tienen si? o me equivoquo... si la respuesta es afirmativa, entonces también ponle un max al nivel....
  #8 (permalink)  
Antiguo 03/03/2011, 19:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

NO ME RESPETO LOS ESPACIOS, LO PONGO MÁS CLARO AQUÍ:


//DATOS MUESTRA
NOMBRE__PUNTOS__NIVEL

PACO______10______1
LAURA____ 345______8
MEMO ____40 ______ 3
PACO ____245 ______6
LAURA____4 ________2
MEMO ____578______9


// al hacer la consulta Con max me muestra esto

NOMBRE__PUNTOS__NIVEL

MEMO______578____ 3
LAURA _____345 ____2
PACO ______245____ 1

// CUANDO DEBERIA MOSTRARME LO SIGUIENTE

NOMBRE__PUNTOS__NIVEL

MEMO______ 578 ____9
LAURA ______345 ____8
PACO ______245 _____6
  #9 (permalink)  
Antiguo 03/03/2011, 19:04
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

No de hecho no pues de hecho tengo el siguiente escenario:

Nombre__puntos__nivel
paco____345______3
// y otro registro del mismo
paco____200______5

necesito que coincida con el registro de su misma fila de los puntos mas altos
  #10 (permalink)  
Antiguo 03/03/2011, 19:23
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

y si haces una subconsulta donde te traiga el registro completo donde esta MAX(puntos)
  #11 (permalink)  
Antiguo 03/03/2011, 19:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

a caray, eso si no se como hacerlo, quedaría algo como esto:

Código PHP:
$todos "SELECT idfacebook,nombre,puntos,nivel, MAX(puntos) AS puntos in (SELECT nivel, MAX(nivel) AS nivel FROM puntaje) FROM puntaje GROUP BY nombre ORDER BY puntos DESC LIMIT 0,10"
o me podrías mostrar como, te lo agradeceria. SALUDOS Y GRACIAS
  #12 (permalink)  
Antiguo 03/03/2011, 20:07
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

pues no.. tampoco sirvio así porque pensando en la broma conseguí que para traer la subconsulta necesito comparar con los puntos, pero pueden haber 2 registros con el mismo puntaje, y tampoco puedo comparar con el id, porque al igual que el nivel me va a traer el primero, pero deja a ver si consigo una manera... voy a intentar con algo que estoy pensando
  #13 (permalink)  
Antiguo 04/03/2011, 03:17
 
Fecha de Ingreso: abril-2008
Mensajes: 93
Antigüedad: 16 años
Puntos: 10
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

Esto creo que debería funcionar:

Código:
SELECT	puntaje.idfacebook, puntaje.nombre, puntaje.puntos, puntaje.nivel
  FROM	puntaje, 
		(SELECT idfacebook, nombre, MAX(puntos) AS mayor
		   FROM puntaje
		  GROUP BY 1,2) AS maximo
 WHERE	puntaje.idfacebook = maximo.idfacebook
   AND	puntaje.nombre = maximo.nombre
   AND	puntaje.puntos = maximo.mayor
 ORDER	BY puntaje.puntos DESC LIMIT 0,10
si un idfacebook se corresponde con un nombre, deberías quitarlo para optimizar la ejecución de la siguiente forma:

Código:
SELECT	puntaje.idfacebook, puntaje.nombre, puntaje.puntos, puntaje.nivel
  FROM	puntaje, 
		(SELECT idfacebook, MAX(puntos) AS mayor
		   FROM puntaje
		  GROUP BY 1,2) AS maximo
 WHERE	puntaje.idfacebook = maximo.idfacebook
   AND	puntaje.puntos = maximo.mayor
 ORDER	BY puntaje.puntos DESC LIMIT 0,10
Espero que funcione
  #14 (permalink)  
Antiguo 04/03/2011, 11:59
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

Buen día, te comento reivaj01 el "idfacebook" solo lo uso para colocar su avatar a un lado de su nombre registrado en la base de datos
vaya lo imprimo de la siguiente forma:
Código PHP:
<img src="https://graph.facebook.com/<? echo $row['idfacebook'?>/picture" />
LOS REGISTROS EN sql CORRESPONDEN A LOS SIGUIENTES:

puntaje = nombre de la tabla

idfacebook = coloca la imagen del usuario
nombre = nombre del usuario
puntos = los que van ordenados de mayor a menor con un limit de 10
nivel = el nivel donde se quedo correspondiendo al puntaje mayor obtenido.

asi es como necesito q me lo muestre gracias a todos!
  #15 (permalink)  
Antiguo 04/03/2011, 12:05
 
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agrupar por nombre en Top 10 en PHP y MySQL

Buen día, te comento reivaj01 el "idfacebook" solo lo uso para colocar su avatar a un lado de su nombre registrado en la base de datos
vaya lo imprimo de la siguiente forma:
Código PHP:
<img src="https://graph.facebook.com/<? echo $row['idfacebook'?>/picture" />
LOS REGISTROS EN sql CORRESPONDEN A LOS SIGUIENTES:

puntaje = nombre de la tabla

idfacebook = coloca la imagen del usuario
nombre = nombre del usuario
puntos = los que van ordenados de mayor a menor con un limit de 10
nivel = el nivel donde se quedo correspondiendo al puntaje mayor obtenido.

asi es como necesito q me lo muestre gracias a todos!

Etiquetas: agrupar, nombre, php, top
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 11:13.