MySQL - Ayuda Consulta Relacion Muchos a Muchos

 
Vista:
sin imagen de perfil

Ayuda Consulta Relacion Muchos a Muchos

Publicado por Fabian (3 intervenciones) el 20/08/2023 22:12:41
Hola, gusto en saludar.

me encuentro trabajando de la creación de un dashboard conectado la base de datos de GLPI con Metabase. trato de generar una consulta que me muestre los tickets relacionado el técnico y el solicitante en un mismo registro de salida de dicha consulta.

Modelo:
modelo_tablas

el problema que he presentado es que tanto el solicitante como el técnico se registran en la misma tabla glpi_tickets_users, les pongo un ejemplo para el ticket con ID 2

tabla_glpi_tickets_users

me gustaría que la salida me muestre algo asi:

salida-deseada2

Agradezco su gentil ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Ayuda Consulta Relacion Muchos a Muchos

Publicado por Ivan (37 intervenciones) el 21/08/2023 11:58:43
Hola,

no me he estudiado (ni me voy a estudiar) toda la estructura de la base de datos de GLPI, pero creo que te confundes con el campo users_id.

Tal y como muestras en la tabla glpi_tickets_users, efectivamente hay un campo users_id, pero no tiene sentido que un ID se refiera a dos tablas distintas (usuarios y técnicos).

Yo diría (por pura lógica) que las claves que buscas son las dos de abajo glpi_tickets_id y glpi_users_id, por lo que utilizando la tabla glpi_tickets_users haces una consulta where con el tickets_id='2' y le añades un and glpi_tickets_users=glpi_tickets.id y and glpi_users_id=glpi_users.id

Ya me contarás.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda Consulta Relacion Muchos a Muchos

Publicado por Fabian (3 intervenciones) el 21/08/2023 16:52:50
Hola Iván, gracias por responder.

Disculpa si te confundí con cos campos repetidos en la taba GLPI_TICKETS_USERS, Cuando ejecute la ingeniería inversa de la DB desde MySQL Workbrench, no vi las relaciones por eso las puse de forma manual sin fijarme en la duplicidad del campo. (mil disculpas)

- Así vienen las tablas recién ejecuto la ingeniería inversa, no entiendo por que no me trae las relaciones:

Correccion-Modelo

- Consulta Estoy ejecutando el siguiente Join para obtener el reporte, pero este retorna en dos registros, y me gustaría en un solo registro
tener al solicitante y al técnico

SELECT tk.id as "NUMERO CASO",
tk.name as "DESCRIPCION",
us.name as "SOLICITANTE",
tk.date_creation as "FECHA APERTURA",
tk.solvedate as "FECHA CIERRE"
FROM glpi_tickets_users tu
INNER JOIN glpi_tickets tk ON tu.tickets_id = tk.id
INNER JOIN glpi_users us ON tu.users_id = us.id
WHERE tk.id=2;

consulta

Salida deseada: Me gustaría tener una salida del solicitante y el técnico en un solo registro.

salida-deseada2.jpg

Feliz Dia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Ayuda Consulta Relacion Muchos a Muchos

Publicado por Ivan (37 intervenciones) el 21/08/2023 22:45:24
Hola,

ok, entonces creo que el problema son los inner join.
Tengo escrito un post Diferencias entre where y join con MySQL donde hablo sobre esto.

El caso es que join combina tablas, es decir, creará filas para cada uno de los inner join que coincida, por eso sale una fila para cada tabla.

Mientras que si usas WHERE y debajo dos AND en vez de los inner join filtrará el resultado que buscas en una sola fila.

1
2
3
4
5
6
7
8
9
SELECT tk.id as "NUMERO CASO",
  tk.name as "DESCRIPCION",
  us.name as "SOLICITANTE",
  tk.date_creation as "FECHA APERTURA",
  tk.solvedate as "FECHA CIERRE"
FROM glpi_tickets_users tu, glpi_tickets tk, glpi_users us
WHERE tk.id = 2
AND tu_tickets_id = tk.id
AND tu.users_id = us.id

Creo que es lo que buscas.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda Consulta Relacion Muchos a Muchos

Publicado por FavianCab (3 intervenciones) el 22/08/2023 21:59:34
Buena tarde, lo pude solucionar con la siguiente consulta. espero pueda ayudar a alguien mas que lo necesite.

1
2
3
4
5
6
7
8
9
SELECT 	t.id as "NUMERO CASO",
		t.name as "DESCRIPCION",
        us.name as "SOLICITANTE",
        ut.name as "TECNICO",
        t.date_creation as "FECHA APERTURA",
		t.solvedate as "FECHA CIERRE"
FROM glpi_tickets t
LEFT OUTER JOIN (SELECT tu.tickets_id, u.name FROM glpi_users u  inner join glpi_tickets_users tu on u.id=tu.users_id WHERE tu.type=1) us on us.tickets_id=t.id
LEFT OUTER JOIN (SELECT tu.tickets_id, u.name FROM glpi_users u  inner join glpi_tickets_users tu on u.id=tu.users_id WHERE tu.type=2) ut on ut.tickets_id=t.id;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar