Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/05/2011, 08:28
Avatar de aniMAYtions
aniMAYtions
 
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: consulta atragantada

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 original
  1. Select 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, '')
  2. from servicios v left join instituciones i on v.id_institucion = i.id_institucion
  3. inner join usuarios u on v.usuario = u.username
  4. inner join usu_plataforma up on v.trabajador = up.username
  5. left join estado e on v.id_estado = e.id_estado
  6. left join empresas emp on v.usuario = emp.cif
  7. where v.usuario != '0' "

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!!