es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo realizar una consulta para mostrar datos que tienen meses diferentes?

Entonces, tengo una pantalla de visualización de informe que filtra los períodos De y Hasta, como se muestra a continuación:

enter image description here

Y tengo datos de empleados con fechas como esta:

enter image description here

Luego, cuando veo el informe, la fecha de fin de febrero no aparece porque el proceso De y Hasta es solo en enero. Debería aparecer porque la fecha de inicio es en enero.

enter image description here

Esta es mi consulta, por favor ayúdame.

$this->db->select("a.id, a.employee_id, a.employee_name, a.leave_name, a.start_date, a.end_date, a.status, 
                   b.id, b.employee_id, b.job_title_name, b.employment_status_name")
         ->join('hr_employee b', 'a.employee_id = b.employee_id', 'left')
         ->where("a.start_date AND a.end_date BETWEEN '$data[from]' AND '$data[to]'");

   return $this->db->get('hr_leaves a');
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con la consulta es que sólo está verificando si tanto la start_date (fecha de inicio) como la end_date (fecha final) se encuentran dentro del período dado. Dado que la end_date para febrero está fuera del período dado, no se está incluyendo en los resultados de la consulta.

    Para incluir los datos de permisos que comienzan en enero y terminan en febrero, debemos modificar la cláusula WHERE para verificar si tanto la start_date como la end_date se encuentran dentro del período dado. Aquí tienes una consulta actualizada que debería dar los resultados deseados:

    $this->db->select("a.id, a.employee_id, a.employee_name, a.leave_name, a.start_date, a.end_date, a.status, b.id, b.employee_id, b.job_title_name, b.employment_status_name")
             ->join("hr_employee b", "a.employee_id = b.employee_id", "left")
             ->where("((a.start_date BETWEEN '$data[from]' AND '$data[to]') OR (a.end_date BETWEEN '$data[from]' AND '$data[to]'))")
             ->get("hr_leaves");
    
    return $query->result_array();
    

    Esto debería devolver todos los datos de permisos donde tanto la start_date como la end_date se encuentren dentro del período dado, sin importar si la otra fecha está fuera de él.

Comments are closed.