Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/10/2014, 13:30
jdag1992
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Consulta Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Para el tipo de consulta que quieres, no puedes usar JOIN implícitos (la coma), sino que debes hacerlos explícitos invocando dos veces la misma tabla pero con alias....
Es decir, no es una consulta muy simple.
Pero además, me da la impresión de que tu tabla relacional tiene un error de diseño...
Si para cada Ticket existe un Autor y un UsuarioAsignado, ambos deben estar en el mismo registro, en campos separados, y apuntando a la tabla de Usuarios.

En principio, lo que quieres tal vez se resuelva así:
Código MySQL:
Ver original
  1.     T.id id,
  2.     U1.firstname name,
  3.     IF(TU.TYPE = 1, U1.realname, '') tipo1,
  4.     IF(TU.TYPE = 1, U2.realname, '') tipo2
  5. FROM glpi_tickets T
  6.     INNER JOIN `glpi_tickets_users` TU  ON T.id = TU.`tickets_id`
  7.     INNER JOIN glpi_users U1 ON TU.`users_id` = U1.id AND TU.TYPE = 1
  8.     INNER JOIN glpi_users U2 ON TU.`users_id` = U2.id AND TU.TYPE = 2
pero para que funcionen de una manera simple, las tablas deberían ser:

Con eso la query sería:
Código MySQL:
Ver original
  1.     T.id id,
  2.     U1.firstname name,
  3.     U1.realname tipo1,
  4.     U2.realname tipo2
  5. FROM glpi_tickets T
  6.     INNER JOIN `glpi_tickets_users` TU  ON T.id = TU.`IdTicket`
  7.     INNER JOIN glpi_users U1 ON TU.`IdAutor` = U1.id
  8.     INNER JOIN glpi_users U2 ON TU.`idusuarioAsignado` = U2.id
Mas simple, ¿no?
Bien Amigo

El segundo query que colocaste no funcionaria en mi caso, ya que en la tabla Tickets_Usuario se guardan en varios registros el Autor y UsuarioAsignado con un mismo numero de ticket

De esta manera por ejemplo

IDUsuarioTicket,ID_Ticket, TipoU
1 1 1
2 1 2

El primer query es el que me sirve, pero no me arroja resultado, no muestra nada. Partiendo de ese query que colocaste, hice este
Código MySQL:
Ver original
  1.     T.id as id,
  2.     if(tu.type='1', U1.firstname, '') as name,
  3.     if(tu.type='2', U2.firstname, '') as name2
  4. FROM glpi_tickets T
  5.     INNER JOIN glpi_tickets_users TU  ON T.id = TU.tickets_id
  6.     INNER JOIN glpi_users U1 ON TU.users_id = U1.id
  7.     INNER JOIN glpi_users U2 ON TU.users_id = U2.id

Arroja los resultados pero se repiten y se muestran de la siguiente manera

IDTicket, Autor, Asignado
19 Fernando NULL
19 NULL Alejandro

Esta parte del primer query que enviaste
Código MySQL:
Ver original
  1. INNER JOIN glpi_users U1 ON TU.`users_id` = U1.id AND TU.TYPE = 1
  2.     INNER JOIN glpi_users U2 ON TU.`users_id` = U2.id AND TU.TYPE = 2
No funcionaba, asi que deje solamente los if que estan mas arriba en el select.

Esta dificil la cosa no?

Última edición por gnzsoloyo; 09/10/2014 a las 13:52