使用codeigniter连接3个表

时间:2017-01-20 10:01:17

标签: mysql codeigniter join

在这里,我想加入这三个表,即salarypayrollattendance。首先,我想加入salary.salary_template_id employee.salary_template_id,之后我想与employee.user_id加入attendance.user_id以获得每个user_id的基本工资。我该如何加入? 我的工资表看起来像这样

我收到此错误

  

'on clause'中的未知列'tbl_employee_payroll.salary_template_id'

salary_template_id  salary_grade    basic_salary    overtime_salary
1                        a             10000    
2                        b             15000    

我的员工表看起来像这样

payroll_id  user_id     salary_template_id  
    1         1                NULL 
    2         36                2   
    3         43                1   

我的出席看起来像这样

 attendance_id  user_id     leave_category_id   date_in     date_out    attendance_status 


    13           36              0            2017-01-02    2017-01-02       1
    14           36              3            2017-01-04    2017-01-04       3

这是我的代码

public function attendance_report_by_empid($user_id = null, $sdate = null) {

    $this->db->select('attendance.*', FALSE);
    $this->db->select('employee.*', FALSE);
    $this->db->select('salary.*', FALSE);

    $this->db->from('attendance');
    $this->db->join('salary', 'salary.salary_template_id  = employee.salary_template_id', 'inner');
    $this->db->join('employee', 'employee.user_id  = attendance.user_id', 'left');
    $this->db->where('attendance.user_id', $user_id);
    $this->db->where('attendance.date_in', $sdate);
    $this->db->where('attendance.date_out <=', $sdate);

    $query_result = $this->db->get();
    $result = $query_result->result();

    return $query;
}

我的结果应该是这样的

attendance_id   user_id     leave_category_id   date_in     date_out    attendance_status  salary
    13           36              0            2017-01-02    2017-01-02       1              1000
    14           36              3            2017-01-04    2017-01-04       3              1000

3 个答案:

答案 0 :(得分:0)

根据您的愿望输出查询应该像这样

$this->db->select('*'); 
$this->db->from('attendence');
$this->db->join('salary'.'employee.salary_template_id', 'attendence.salary_template_id = table2.id',);
$this->db->join('employee', 'employee.user_id = attendance.user_id');
$query = $this->db->get();

答案 1 :(得分:0)

您正在错误的桌子上申请加入

    $this->db->select('attendance.*', FALSE);
    $this->db->select('employee.*', FALSE);
    $this->db->select('salary.*', FALSE);
    $this->db->from('salary '); 
    $this->db->join('employee', 'salary.salary_template_id  = employee.salary_template_id', 'inner');
    $this->db->join('attendance', 'employee.user_id  = attendance.user_id', 'left');
    $this->db->where('attendance.user_id', $user_id);
    $this->db->where('attendance.date_in', $sdate);
    $this->db->where('attendance.date_out <=', $sdate);
    $query_result = $this->db->get();
    $result = $query_result->result();

答案 2 :(得分:0)

我通过更改我的代码来获得它

public function attendance_report_by_empid($user_id = null, $sdate = null) {

$this->db->select('attendance.*', FALSE);
$this->db->select('employee.*', FALSE);
$this->db->select('salary.*', FALSE);

$this->db->from('attendance');

$this->db->join('employee', 'employee.user_id  = attendance.user_id', 'left');
$this->db->join('salary', 'salary.salary_template_id  = employee.salary_template_id', 'inner');
$this->db->where('attendance.user_id', $user_id);
$this->db->where('attendance.date_in', $sdate);
$this->db->where('attendance.date_out <=', $sdate);

$query_result = $this->db->get();
$result = $query_result->result();

return $query;

}

问题是我们必须在使用该表进行连接之前声明该表。