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

Un ranking con mysql...

Estas en el tema de Un ranking con mysql... en el foro de Mysql en Foros del Web. Qué tal, sigo en mi lucha con MySql... Aquí va esta Resulta que tengo que mostrar un ranking, un top 20 dígamoslo así. Ese top ...
  #1 (permalink)  
Antiguo 27/10/2009, 16:33
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Un ranking con mysql...

Qué tal, sigo en mi lucha con MySql...

Aquí va esta

Resulta que tengo que mostrar un ranking, un top 20 dígamoslo así.

Ese top se saca por la cantidad de visitas que recibe un usuario. La consulta va así:

Código mysql:
Ver original
  1. SELECT ew_promotores.id_promotor, COUNT( * ) AS totalVisitas, url_promotor FROM ew_p_visitas, ew_promotores WHERE ew_p_visitas.id_promotor = ew_promotores.id_promotor AND candidato_id=18 GROUP BY ew_p_visitas.id_promotor ORDER BY totalVisitas DESC

Me arroja registros como estos:

Código:
id_promotor - totalVisitas - url
10 - 1043 - alguien
1 - 13 - otro alguien
11 - 7 - alguno
Ahora viene mi duda, como hago para decir que me traiga la posición del id 1? En este caso sería la posición 2. O decir que me traiga la posición del id 11, en esta caso sería la 3. Sólo debería traer un registro esa consulta (son su respectiva posición), pero trae obvio todos los registros existentes.

Llegué a hacer un contador, pero no supe que mas agregar en el Sql:

Código mysql:
Ver original
  1. SET @row=0;
  2. SELECT (@row:=@row+1) as row, ew_promotores.id_promotor, COUNT( * ) AS totalVisitas, url_promotor FROM ew_p_visitas, ew_promotores WHERE ew_p_visitas.id_promotor = ew_promotores.id_promotor AND candidato_id=18 GROUP BY ew_p_visitas.id_promotor ORDER BY totalVisitas DESC

Alguien tiene una idea??

De antemano gracias!


Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #2 (permalink)  
Antiguo 27/10/2009, 17:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Un ranking con mysql...

que tal carlx

Confiando en que tu consulta tiene una salida prueba así:

Código sql:
Ver original
  1. SELECT (@REG := @REG + 1) Linea, ep.id_promotor, COUNT( * ) AS totalVisitas, url_promotor
  2. FROM (SELECT @REG :=0,ep.id_promotor, COUNT( * ) AS totalVisitas, url_promotor
  3. FROM ew_p_visitas epv INNER JOIN ew_promotores ep ON epv.id_promotor=ep.id_promotor
  4. WHERE candidato_id=18 GROUP BY epv.id_promotor ORDER BY totalVisitas DESC) consulta;

Espero no haberme equivocado.

La fuente está en las faq's de mysql por gnzsoloyo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/10/2009, 17:55
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Un ranking con mysql...

Hola Huesos52, gracias por tu respuesta, de una la probé y me arrojó esto:

Cita:
#1248 - Every derived table must have its own alias


Disculpa...


Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 27/10/2009, 17:59
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Un ranking con mysql...

donde estaba el near?
cerca a donde se presenta el error?
seguro pusiste el alias a la tabla llamado consulta?

prueba esta:
Código sql:
Ver original
  1. SELECT (@REG := @REG + 1) Linea, ep.id_promotor, consulta.totalVisitas, url_promotor FROM
  2. (SELECT @REG :=0,ep.id_promotor, COUNT(*) AS totalVisitas, url_promotor
  3. FROM ew_p_visitas epv INNER JOIN ew_promotores ep ON epv.id_promotor=ep.id_promotor
  4. WHERE candidato_id=18 GROUP BY epv.id_promotor ORDER BY totalVisitas DESC) consulta;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 27/10/2009, 18:09
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Un ranking con mysql...

Sí parse, me comí la palabra "consulta", la agregué y me aorroja este error, que pena:

Cita:
#1054 - Unknown column 'ep.id_promotor' in 'field list'
Y sí, se me olvida decirte, la consulta que coloqué en un principio me arroja registros

Saludos y gracias
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #6 (permalink)  
Antiguo 27/10/2009, 18:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Un ranking con mysql...

nos acercamos


Código sql:
Ver original
  1. SELECT (@REG := @REG + 1) Linea, consulta.id_promotor, consulta.totalVisitas, url_promotor FROM
  2. (SELECT @REG :=0,ep.id_promotor, COUNT(*) AS totalVisitas, url_promotor
  3. FROM ew_p_visitas epv INNER JOIN ew_promotores ep ON epv.id_promotor=ep.id_promotor
  4. WHERE candidato_id=18 GROUP BY epv.id_promotor ORDER BY totalVisitas DESC) consulta;

sin probar es dificil
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 27/10/2009, 18:19
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Un ranking con mysql...

Hola de nuevo huesos, me arroja tal cual lo que me arroja a mí jeje...

Osea los registros que puse arriba, a mí también me los numera de la forma que lo hice...

Quizás no me expliqué bien. La idea es saber en que posición está el id 11 cuando lo pregunte, me entiendes?

Osea que en sí, la consulta me debe arrojar la posición si yo pregunto por un id. Si pregunto por el id 11, me debería arrojar

3

Si pregunrtara por el id 1, me arrojaría

2

No sé si me dí a entender...

Toma como ejemplo los registros que puse arriba

Gracias por el seguimiento man!


Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Última edición por Carxl; 27/10/2009 a las 18:26
  #8 (permalink)  
Antiguo 27/10/2009, 18:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Un ranking con mysql...

entiendo

se me ocurre algo ortodoxo.
tener una tabla llamada ranking donde esta se borre y se llene cada que se realice la consulta.

al ejecutar esta consulta, que se guarde con posiciones y todo y se pueda acceder a la tabla en ese momento.

Tal como lo tienes esto no es posible, por que el orden no está guardado sino que se está utilizando al momento de la ejecución.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 27/10/2009, 18:38
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Un ranking con mysql...

Ok Huesos52, eso ya lo puedo hacer yo entonces...

Muchas gracias por tu ayuda!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #10 (permalink)  
Antiguo 28/10/2009, 05:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Un ranking con mysql...

Aunque ya lo habréis resuelto, esto puede funcionar. Esto debería encontrarte la posición en el ranking del promotor cuyo id_promotor es el 3, y lo hace sobre la marcha (utilizo, como huesos52, la sintaxis que el FAQ nos ofreció gnzsoloyo):
SELECT t2.Rank, t2.promotor, t2.totalVisitas, t2.URL FROM (SELECT @rank:=@rank+1 AS Rank, t1.promotor promotor, t1.totalVisitas totalVisitas, t1.URL URL
FROM (SELECT ew_promotores.id_promotor promotor, COUNT( * ) AS totalVisitas, url_promotor URL FROM (select @rank:=0) r, ew_p_visitas INNER JOIN ew_promotores ON ew_p_visitas.id_promotor = ew_promotores.id_promotor GROUP BY ew_p_visitas.id_promotor ORDER BY totalVisitas DESC)t1)t2 WHERE t2.promotor = 3

Ya sé que no es lo más ortodoxo y desde luego tampoco lo más eficiente, pero te encontrará la posición sobre el total de un promotor determinado, tal y como lo tienes.
Saludos
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:01.