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

Problema con subconsulta

Estas en el tema de Problema con subconsulta en el foro de Mysql en Foros del Web. Hola, que tal? Compañeros foreros... Ahora les escribo pidiendo una manita, pues despues de buscar en el foro algo que pudiera alumbrarme el foco, y ...
  #1 (permalink)  
Antiguo 06/11/2011, 20:46
Avatar de punk-devil  
Fecha de Ingreso: febrero-2008
Ubicación: Tuxtla Gutiérrez, Chiapas, Mexico
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 3
Problema con subconsulta

Hola, que tal? Compañeros foreros...

Ahora les escribo pidiendo una manita, pues despues de buscar en el foro algo que pudiera alumbrarme el foco, y de estar intentando sin lograr nada, tengo que volver aca.

La situacion es la siguiente:

Tengo la tabla usuarios:
Código:
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(4)       | NO   | PRI | NULL    | auto_increment |
| username | varchar(32)  | NO   |     | NULL    |                |
| password | varchar(32)  | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
Y la tabla alertas (donde usuario es un ID de la tabla usuarios):
Código:
+----------+-----------+------+-----+-------------------+-----------------------------+
| Field    | Type      | Null | Key | Default           | Extra                       |
+----------+-----------+------+-----+-------------------+-----------------------------+
| id       | int(4)    | NO   | MUL | NULL              | auto_increment              |
| usuario | int(4)    | NO   |     | NULL              |                             |
| hora     | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------+-----------+------+-----+-------------------+-----------------------------+
El problema aca, es que desde el panel de administrador debo mostrar todos los usuarios (con o sin alertas) y a un lado la cantidad de alertas que tiene cada usuario.

Habia pensado en una consulta de este tipo:
Código:
SELECT usuarios.id, count(alertas.id) FROM usuarios, alertas GROUP BY alertas.usuario;
Y:
Código:
SELECT usuarios.id, alertas.cantidad FROM usuarios, (SELECT usuario, count(id) as cantidad FROM alertas GROUP BY usuario ) alertas WHERE usuarios.id=alertas.usuario or usuarios.id=usuarios.id;
(Y muchos intentos mas, modificando la estructura de la consulta)

Pero de ninguna forma he obtenido el resultado que deberia por ejemplo ser:
Código:
+----+----------+
| id | cantidad |
+----+----------+
|  3 |        0 |
|  4 |        2 |
|  5 |        5 |
+----+----------+
  #2 (permalink)  
Antiguo 07/11/2011, 03:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con subconsulta

Código MySQL:
Ver original
  1. SELECT u.id, IFNULL(sbc.numAlertas,0) AS nAlertas
  2. FROM usuarios AS u
  3.                 LEFT JOIN
  4.                          (SELECT alertas.usuario, Count(*) AS numAlertas
  5.                           FROM alertas
  6.                           GROUP BY alertas.usuario) AS sbc
  7.                  ON u.id = sbc.usuario;

Te parece...?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 07/11/2011, 16:20
Avatar de punk-devil  
Fecha de Ingreso: febrero-2008
Ubicación: Tuxtla Gutiérrez, Chiapas, Mexico
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 3
De acuerdo Respuesta: Problema con subconsulta

Cita:
Iniciado por quimfv Ver Mensaje
Código MySQL:
Ver original
  1. SELECT u.id, IFNULL(sbc.numAlertas,0) AS nAlertas
  2. FROM usuarios AS u
  3.                 LEFT JOIN
  4.                          (SELECT alertas.usuario, Count(*) AS numAlertas
  5.                           FROM alertas
  6.                           GROUP BY alertas.usuario) AS sbc
  7.                  ON u.id = sbc.usuario;

Te parece...?
Muchas gracias por la respuesta, la probé y funcionó de maravillas!!

Aunque tambien (agradeciendo al director de la carrera en la universidad) funciona de la siguiente forma:

Código MySQL:
Ver original
  1. SELECT usuarios.id, count(alertas.id)
  2. FROM usuarios LEFT OUTER JOIN alertas
  3. ON usuarios.id = alertas.usuario
  4. GROUP BY usuarios.id;

Última edición por punk-devil; 07/11/2011 a las 16:20 Razón: Etiqueta "[CODE]" sobrante

Etiquetas: count, subconsulta
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 19:02.