Foros del Web » Programando para Internet » ASP Clásico »

Problema con sentencia SQL

Estas en el tema de Problema con sentencia SQL en el foro de ASP Clásico en Foros del Web. Hola, tengo que cambiar la forma en que trabajo la base de datos me dijeron para poder recolectar datos para estadísticas de manera efectiva. Estoy ...
  #1 (permalink)  
Antiguo 10/07/2005, 19:43
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Problema con sentencia SQL

Hola, tengo que cambiar la forma en que trabajo la base de datos me dijeron para poder recolectar datos para estadísticas de manera efectiva. Estoy en pleno proceso, y ya tengo un problema. Tengo dos tablas, una de usuarios registrados (USU_USUARIOS) y otra de mensajes (MEN_MENSAJES). Los campos relevantes para este problema son:

USU_USUARIOS
USU_ID....Id del usuario registrado

MEN_MENSAJES
MEN_USUID....Id del usuario que escribió el mensaje

Lo que yo quiero hacer es que me muestre las veces que escribió cada usuario. Si lo hago con el ID de usuario (usando el campo MEN_USUID de la tabla MEN_MENSAJES) no me da problema, pero si en lugar de poner el ID, quiero poner el Nick del usuario (que lo tengo que sacar de la tabla USU_USUARIOS), ahí es en donde viene el problema, me repite todos los valores dos veces, sin importarle los criterios del group by. Esta sentencia es la que me funciona (pero no es lo que busco, ya que con esto estaría mostrando el Id del usuario que escribió el mensaje, y no su nick):

sql = "SELECT COUNT(MEN_USUID) AS COUNTER, MEN_USUID FROM MEN_MENSAJES GROUP BY MEN_USUID"

Intentando lograr que me muestre el nick en lugar del ID, usé esta sentencia, la cual no funciona correctamente:

sql = "SELECT COUNT(MEN_USUID) AS COUNTER, MEN_USUID, USU_NICK FROM MEN_MENSAJES, USU_USUARIOS GROUP BY MEN_USUID, USU_NICK"

Esa sentencia más precisamente lo que me devuelve es por cada usuario que está en la tabla USU_USUARIOS, me repite la primer sentencia SQL.
Es decir, la primer sentencia SQL supongamos que me devuelve esto:

Veces que se repite el ID: 2    Id que se repite: 5892
Veces que se repite el ID: 1    Id que se repite: 4589

Entonces, ahora si en la tabla USU_USUARIOS tengo en total 4 usuarios registrados, lo que hace es multiplicar ese resultado por la cantidad de usuarios registrados, dandome como resultado 8 veces lo mismo.
Como puedo hacer para lograr esto que ando buscando?
Saludos y estaré muy agradecido si alguien me puede dar una mano en esto.
Suerte!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 11/07/2005, 00:56
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 19 años, 7 meses
Puntos: 0
El group by lo tienes bien, pero te falta la condicion del join (te hace la multiplicación cartesiana de los registros, por eso te salen tantos).

Código:
SELECT COUNT(men_usuid) as counter, men_usuid, usu_nick
FROM men_mensajes, usu_usuarios
WHERE men_mensajes.men_usuid = usu_usuarios.usu_id
GROUP BY men_usuid, usu_nick
  #3 (permalink)  
Antiguo 11/07/2005, 07:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Excelente

muchas gracias. Funcionó correctamente. Me gustaría saber como es eso de la multiplicación cartesiana de los registros. Obviamente si no es demasiado extenso de explicar y lo quieres comentar.
Agradezco tu ayuda.
Saludos!.
Suerte!.
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 11/07/2005, 07:36
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Cita:
como es eso de la multiplicación cartesiana de los registros
Un producto cartesiano es basicamente que por cada registro de la 1ar tabla, se le mezclarán los campos de cada uno de los registros de la 2a tabla.
Usa el join para evitarlo, ya que si usas condiciones en el where igual se forma, pero se filtra posteriormente.

Seguro encontraras mucha más información con google.

Saludos
  #5 (permalink)  
Antiguo 11/07/2005, 08:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Exacto, eso era lo que me pasaba lo que pasa es que no sabía bien como explicarlo. Muchas gracias Myakire por la explicación.
Saludos!.
__________________
Add, never Remove
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 21:33.