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

[SOLUCIONADO] Rellenar campo según valores

Estas en el tema de Rellenar campo según valores en el foro de Mysql en Foros del Web. Hola a tod@s siguiendo con un proyecto que estoy haciendo, de vez en cuando tengo un tropezón y ahora me he bloqueado en este paso, ...
  #1 (permalink)  
Antiguo 06/05/2015, 03:14
Avatar de pruizsoriano  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Rellenar campo según valores

Hola a tod@s siguiendo con un proyecto que estoy haciendo, de vez en cuando tengo un tropezón y ahora me he bloqueado en este paso, agradecería vuestra ayuda.

Tengo la siguiente consulta, que funciona correctamente, pero necesitaría que si el campo Date `tb_cuadrante2015`.`EMPIEZA` (formateado en la consulta) se encuentra entre los valores Date de los campos tb_vacaciones.`EMPIEZA`, tb_vacaciones.`TERMINA`, en el campo tb_personal.`ESTADO1`, apareciese el texto "VACACIONES".

Código MySQL:
Ver original
  1. tb_personal.`APELLIDOS`,
  2. tb_personal.`NOMBRE`,
  3. tb_vacaciones.`IdVACACIONES`,
  4. tb_vacaciones.`EMPIEZA`,
  5. tb_vacaciones.`TERMINA`,
  6. tb_vacaciones.`DIA_A`,
  7. tb_personal.`ESTADO1`,
  8. DATE_FORMAT(`tb_cuadrante2015`.`EMPIEZA`,'%Y-%m-%d') AS `FECHA`
  9. tb_personal
  10. tb_vacaciones
  11. tb_personal.`VACACIONES1`=tb_vacaciones.`IdVACACIONES`
  12. tb_cuadrante2015
  13. ON tb_personal.`TURNO`=tb_cuadrante2015.`TURNO`
  14. tb_guardias
  15. tb_guardias.`IdPERSONAL`=tb_personal.`IdPERSONAL`
  #2 (permalink)  
Antiguo 06/05/2015, 05:19
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 244
Antigüedad: 13 años, 6 meses
Puntos: 20
Respuesta: Rellenar campo según valores

No estoy muy puesto en consultas pero mira este enlace a ver si es lo que buscas:

http://www.mysqltutorial.org/mysql-if-function.aspx
  #3 (permalink)  
Antiguo 07/05/2015, 07:33
Avatar de pruizsoriano  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Rellenar campo según valores

Cita:
Iniciado por baldaweb Ver Mensaje
No estoy muy puesto en consultas pero mira este enlace a ver si es lo que buscas:

[URL="http://www.mysqltutorial.org/mysql-if-function.aspx"]http://www.mysqltutorial.org/mysql-if-function.aspx[/URL]
Muchas gracias baldaweb por tu ayuda, efectivamente ya había tenido en cuenta la función IF, también he probado con CASE y todo lo que se mueve por Internet, pero el problema viene de la complejidad del sistema que estoy creando y con los datos que di en el post creo que es imposible que nadie me ayude de la manera que necesito por eso agradezco doblemente tu ayuda.

El problema se trata más bien de estructurar correctamente los datos que de trabajar con ellos sea cual sea la función que se utilice y en ello estoy.

Básicamente se trata de crear un sistema que contemple los 365 días del año de manera que se puedan asignar guardias de 24 horas, turnos de vacaciones, libranzas etc.

Ya está muy avanzado pero siguen surgiendo "tropezones" como el de asignar dos turnos de vacaciones durante el primer y segundo semestre del año. En cuanto lo tenga más depurado subiré el esquema tanto si me surge algún "tropezón" más como si no, para que cualquiera lo pueda utilizar o adaptar a sus necesidades.
  #4 (permalink)  
Antiguo 08/05/2015, 04:53
Avatar de pruizsoriano  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Rellenar campo según valores

Después de mucho cabilar sobre el tema he llegado a la siguiente consulta:

Código MySQL:
Ver original
  1.     tb_cuadrante2015 . IdFECHA ,
  2. DATE_FORMAT( tb_cuadrante2015 . EMPIEZA ,'%Y-%m-%d') AS  FECHA ,
  3.      tb_personal . IdPERSONAL ,
  4.      tb_personal . TURNO ,
  5.      tb_personal . NOMBRE ,
  6.      tb_personal . APELLIDOS ,
  7.      tb_vacaciones1 . EMPIEZA1 ,
  8.      tb_vacaciones1 . TERMINA1 ,
  9.      tb_vacaciones2 . EMPIEZA2 ,
  10.      tb_vacaciones2 . TERMINA2 ,
  11.      tb_personal . ESTADO1 ,
  12. CASE tb_personal. VACACIONES1   WHEN tb_cuadrante2015. EMPIEZA  >= tb_vacaciones1. EMPIEZA1  AND tb_cuadrante2015. EMPIEZA  <= tb_vacaciones1. TERMINA1  THEN 'VACACIONES'
  13.                 ELSE ''
  14.                 END,
  15. CASE tb_personal. VACACIONES2   WHEN tb_cuadrante2015. EMPIEZA  >= tb_vacaciones2. EMPIEZA2  AND tb_cuadrante2015. EMPIEZA  <= tb_vacaciones2. TERMINA2  THEN 'VACACIONES'
  16.                 ELSE ''
  17.                 END
  18.      bd_pruebas . tb_vacaciones1
  19.     INNER JOIN  bd_pruebas . tb_personal  
  20.         ON ( tb_vacaciones1 . IdVACACIONES1  =  tb_personal . VACACIONES1 )
  21.     INNER JOIN  bd_pruebas . tb_vacaciones2  
  22.         ON ( tb_vacaciones2 . IdVACACIONES2  =  tb_personal . VACACIONES2 )
  23.     INNER JOIN  bd_pruebas . tb_cuadrante2015  
  24.         ON ( tb_cuadrante2015 . TURNO  =  tb_personal . TURNO );

El problema es que funciona bien a medias o menos, me explico:

Efectivamente esta consulta me genera un campo en el que sí se cumplen las condiciones, es decir, aparece la palabra 'VACACIONES', pero el problema es que solo se cumple en el primer CASE y solo con los criterios del primer registro de la tabla 'tb_vacaciones1' o sea el primer turno de vacaciones de los 9 que hay que cada tabla 'tb_vacaciones1' y 'tb_vacaciones2'

Código SQL:
Ver original
  1. IdVACACIONES1  INT(2) UNSIGNED ZEROFILL NOT NULL,
  2.    EMPIEZA1  DATE DEFAULT NULL,
  3.    TERMINA1  DATE DEFAULT NULL,
  4.    DIA_A1  DATE DEFAULT NULL,
  5.   PRIMARY KEY ( IdVACACIONES1 )

Por mucho que le doy vueltas no encuentro el porqué tan solo trabaja con el primer registro de la tabla 'tb_vacaciones1' y obvie todos los demás. Con los datos que doy alguien podría encontrar el fallo?

Última edición por gnzsoloyo; 08/05/2015 a las 05:48
  #5 (permalink)  
Antiguo 08/05/2015, 09:25
Avatar de pruizsoriano  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Rellenar campo según valores

Ante todo pedir disculpas por el bombardeo de planteamientos que he hecho sin pararme a pensar, como decía anteriormente creo que los problemas a los que me enfrento se deben más a la deficiente estructuración de los datos con los que trabajo que a las herramientas que utilizo.

Y así ha sido también en este caso, me explico.

En vez de tener varias tablas con diferentes datos lo que he hecho mediante consultas ha sido unificar estos datos en una sola tabla y trabajar sobre ella de tal manera que con esta sencilla consulta obtengo los datos que quería.

Código MySQL:
Ver original
  1.    tb_cuadrante2015.IdFECHA,
  2.   tb_personal.IdPERSONAL,
  3.   tb_cuadrante2015.TURNO,
  4.   tb_cuadrante2015.NOMBRE,
  5.   tb_cuadrante2015.APELLIDOS,
  6.   tb_cuadrante2015.EMPIEZA1,
  7.   tb_cuadrante2015.TERMINA1,
  8.   tb_cuadrante2015.EMPIEZA2,
  9.   tb_cuadrante2015.TERMINA2,
  10.   tb_cuadrante2015.FECHA,
  11.   IF (
  12.     tb_cuadrante2015.FECHA >= tb_cuadrante2015.EMPIEZA1 AND tb_cuadrante2015.FECHA <= tb_cuadrante2015.TERMINA1
  13.     OR
  14.     tb_cuadrante2015.FECHA >= tb_cuadrante2015.EMPIEZA2 AND tb_cuadrante2015.FECHA <= tb_cuadrante2015.TERMINA2
  15.     ,
  16.     'VACACIONES',
  17.     ''
  18.   ) AS VACACIONES
  19.   bd_pruebas.tb_cuadrante2015
  20.   INNER JOIN bd_pruebas.tb_personal
  21.     ON (
  22.       tb_cuadrante2015.IdPERSONAL = tb_personal.IdPERSONAL
  23.     ) ;

Espero que por lo menos esto le sirva a alguien que haya tenido el mismo problema. Muchas gracias a todos y nuevamente disculpas.

Etiquetas: campo, fecha, rellenar, según, select
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 19:15.