Gracias por el apunte gnzsoloyo. Intentaba ahorrarme escribir código...
Veamos, en mi consulta deben aparecer muchos nombres que se encuentran en distintas tablas a la de servicios.
Primero pongo la consulta y luego paso a explicar.
Código MySQL:
Ver originalSelect id_servicio
, ifnull(id_codserv
, ''), ifnull(nombre_usuario
, ''), nombre
, ifnull(nombre_institucion
, ''), date_format(finicio_servicio
, '%d/%m/%Y'), nombre_estado
, date_format(finicio_servicio
, '%H:%i'), v.id_estado
, v.id_tiposervicio
, ifnull(nombre_empresa
, '') from servicios v
left join instituciones i
on v.id_institucion
= i.id_institucion
inner join usu_plataforma up
on v.trabajador
= up.username
Vale, a mi lo que me interesa es la tabla servicios. Para obtener el nombre del usuario tengo que enlazarla a la tabla usuarios por el dni y para obtener el nombre de la empresa me dirijo a la tabla empresas enlazandola con el cif. Hay que destacar que el usuario del servicio puede ser tanto un dni como un cif(o sea, tanto una persona como una empresa). Por lo tanto en servicios no hay 2 campos, sólo 1 y debería poder identificar en qué tabla se encuentra el nombre asociado al usuario.
Nombre lo obtiene de la tabla usu_plataforma y es el nombre del trabajador que se enlaza a servicios por el dni del trabajador(este sí es un campo aparte).
El nombre de la institución pertenece a la tabla instituciones. Puede ser nulo si no se ingresa ese dato en el servicio(no es olbigatorio).
Los estados aparecen reflejados en la tabla estado y se relacionan con servicios por el id.
El tipo de servicio igual, otra tabla con los tipos que se relaciona con el servicio por el id.
Luego van los filtros, pero eso es lo de menos. Si la consulta no se filtra queda así.
La cosa está en que olvidé la teoría de los left, right e inner join y no encuentro hueco para repasarla con tanto trabajo...
Espero que ya no quepa duda alguna.
Muchas gracias y saludos!!