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

contar registros repetidos

Estas en el tema de contar registros repetidos en el foro de Mysql en Foros del Web. Hola gente, como puedo contar registros repetidos en tablas relacionadas? el ejemplo clasico: usuarios, rol y usuario_rol quiero saber cuantos usuarios tienen mas de un ...
  #1 (permalink)  
Antiguo 04/04/2013, 13:30
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
contar registros repetidos

Hola gente,
como puedo contar registros repetidos en tablas relacionadas?
el ejemplo clasico: usuarios, rol y usuario_rol
quiero saber cuantos usuarios tienen mas de un usuariorol

SELECT * FROM usuario U, rol R, usuariorol UR
AND U.id = UR.usuario_id
AND R.id = UR.rol_id

esto me trae correctamente todos los usuarios con al menos un rol asociado en usuariorol
tengo que contar todos los usuarios que tengas mas de un usuariorol

gracias
  #2 (permalink)  
Antiguo 04/04/2013, 13:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: contar registros repetidos

Código MySQL:
Ver original
  1. SELECT U.id userId, COUNT(*) roles
  2. FROM usuario U INNER JOIN usuariorol UR ON U.id = UR.usuario_id
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/04/2013, 14:03
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: contar registros repetidos

Perfecto!

lo siguiente es mas compicado.
deberia hacer un update en usuarol sobre estos resultados
algo asi:

Código MySQL:
Ver original
  1. UPDATE usuariorol
  2. SET delete = "2013-04-04 00:00:00"
  3. WHERE id = 2
  4. -- con los resultados de la query anterior
  5. -- yo me imagino algo asi pero no se que poner
  6.  
  7. IN (    SELECT U.id userId, COUNT(*) roles
  8.     FROM usuario U INNER JOIN usuariorol UR ON U.id = UR.usuario_id
  9.     GROUP BY U.id
  10.     HAVING COUNT(*) >1)


gracias por la yuda
  #4 (permalink)  
Antiguo 04/04/2013, 14:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: contar registros repetidos

Primer consejo básico: Nunca pongas como nombre de campo una palabra reservada, y menos una que sea parte de las sentencias principales.
DELETE no puede ser usado como nombre de campo porque dispararía un error de sintaxis.

Otro detalles es que no puedes actualizar la misma tabla que lees. es una restricción básica.

En tu caso, creo que deberás hacerlo en dos pasos, pero puede que haya otra posibilidad. En este momento no puedo hacer las pruebas necesarias. Espera a que alguno más te lo responda.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/04/2013, 07:03
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: contar registros repetidos

Eso te daría fallo, haces un IN con un select de dos campos, prueba con esto:

Código MySQL:
Ver original
  1. UPDATE usuariorol SET `delete`= "2013-04-04 00:00:00" WHERE id = 2 IN (
  2.         SELECT U.id FROM usuario U INNER JOIN usuariorol UR ON U.id = UR.usuario_id
  3.         GROUP BY U.id HAVING COUNT(*) >1)

Prueba primero la select, que te coja lo que quieres, no te vayas a cargar la tabla jeje
  #6 (permalink)  
Antiguo 06/04/2013, 09:58
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: contar registros repetidos

Hola Patriarka,

No estoy seguro de entender completamente lo que necesitas, sin embargo, una sentencia como la siguiente te puede ser útil:

Código MySQL:
Ver original
  1. update `usuariorol` `ur`
  2.     inner join (
  3.         select `usuario_id`
  4.         from `usuariorol`
  5.         group by `usuario_id`
  6.         having count(`rol_id`) > 1) `der` on `ur`.`usuario_id` = `der`.`usuario_id`
  7. set `ur`.`delete_at` = now();
Un ejemplo completo en sqlfiddle.

Última edición por wchiquito; 06/04/2013 a las 12:19

Etiquetas: registros, repetidos, select, tabla
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 02:30.