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

[SOLUCIONADO] resultado de un join

Estas en el tema de resultado de un join en el foro de Mysql en Foros del Web. Buenas tardes. espero me puedan ayudar. tengo 3 tablas users ->id ->name tickets ->id ->descrition ->status allocations fk->users.id fk->tickets.id intento por medio un join sacar ...
  #1 (permalink)  
Antiguo 29/10/2014, 09:56
 
Fecha de Ingreso: octubre-2014
Mensajes: 2
Antigüedad: 9 años, 6 meses
Puntos: 0
Busqueda resultado de un join

Buenas tardes.

espero me puedan ayudar.

tengo 3 tablas
users
->id
->name

tickets
->id
->descrition
->status

allocations
fk->users.id
fk->tickets.id

intento por medio un join sacar contar los tickets que tiene asignado cada usuario (aunque no tenga ninguno) y mostralos.

para lo cual desarrolle este script

Código SQL:
Ver original
  1. SELECT  a.user_id,  COUNT(a.ticket_id) AS num
  2. FROM allocations a
  3. JOIN tickets b ON a.ticket_id = b.id
  4. WHERE b.status_id = 1 OR b.status_id = 2
  5. GROUP BY ing_id ORDER BY num LIMIT 1;
el problema es que solo me arroja los usuarios que ya tiene asignado un ticket y no me toma en cuenta los que no tienen ninguno.

espero me puedan ayudar.

de ante mano muchas gracias por su valioso apoyo.

Última edición por gnzsoloyo; 29/10/2014 a las 10:49
  #2 (permalink)  
Antiguo 29/10/2014, 11:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: resultado de un join

Hola emejiasc85:

Vayamos por partes... en tu consulta nunca utilizas la tabla USERS, sólo haces uso de las tablas TICKETS y ALLOCATIONS. Si tienes un buen modelo de BD's y utilizas llaves foráneas, entonces en la tabla TICKETS SÓLO APARECEN LOS ID'S DE LOS USUARIOS que tienen al menos un ticket asignado... ojo con eso.

Segundo, la forma en que estás haciendo la unión de tus tablas, equivale a un INNER JOIN, es decir que tienen que existir elementos en ambas tablas para "unir" los registros...

Debes de utilizar un LEFT JOIN o un RIGTH JOIN... si tienes dudas de cómo funcionan, preguntale a SANTA WIKIPEDIA:

http://es.wikipedia.org/wiki/Join

Y Ojo con el LIMIT 1... esto sólo te mostraría el primer registro de la tabla resultado

Haz la prueba y nos comentas.

Saludos
Leo
  #3 (permalink)  
Antiguo 29/10/2014, 14:57
 
Fecha de Ingreso: octubre-2014
Mensajes: 2
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: resultado de un join

logre que me genere so campos num y nums de cada usuario pero como podria sumar esos campos?
Código SQL:
Ver original
  1. SELECT h.id, (SELECT  COUNT(a.ticket_id  )AS num
  2.             FROM allocations a
  3.             JOIN tickets b ON a.ticket_id = b.id
  4.             WHERE a.ing_id = h.id
  5.             AND b.status_id = 1) AS num,
  6.  
  7.             (SELECT  COUNT(a.ticket_id )AS nums
  8.             FROM allocations a
  9.             JOIN tickets b ON a.ticket_id = b.id
  10.             WHERE a.ing_id = h.id
  11.             AND b.status_id = 2) AS nums
  12. FROM users h
  13. WHERE h.rol_id = 2 GROUP BY h.id ORDER BY num


lo que me arroja
id num nums
1 2 3
2 1 2

Última edición por gnzsoloyo; 29/10/2014 a las 15:47

Etiquetas: join
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 04:01.