There are 35 rows in salary_sheet table but this query fetches 30660 rows, dont know why?
function queryCheck() {
$sql = "select salary_sheet.payment_period_id,salary_sheet.employee_id,salary_sheet.supervisorwise_serial,"
."salary_sheet.employee_type_id,salary_sheet.sl,salary_sheet.cl,salary_sheet.el,salary_sheet.basic,salary_sheet.hr,"
."salary_sheet.medical,salary_sheet.other,salary_sheet.total,salary_sheet.min_wages,"
."salary_sheet.prod_wages,salary_sheet.attn_bonus,salary_sheet.prod_bonus,"
."salary_sheet.ot_hours,salary_sheet.ot_rate,salary_sheet.ot_amount,salary_sheet.stamp_deduct,"
."salary_sheet.absent_deduction,salary_sheet.net_payable,"
."employee.employee_code,employee.employee_name,employee.designation_id,employee.employee_grade,"
."attendance_summery.working_days "
."from salary_sheet "
."left join employee on salary_sheet.employee_id = employee.employee_id "
."left join attendance_summery on salary_sheet.payment_period_id = attendance_summery.payment_period_id "
."where salary_sheet.employee_type_id = 9 and salary_sheet.payment_period_id = 41 "
."order by salary_sheet.supervisorwise_serial desc";
$query = $this->db->query($sql);
$rows = $query->num_rows();
return $rows;
}
Somebody's helps is appreciated.
This is your query.
select salary_sheet.payment_period_id,
salary_sheet.employee_id,
salary_sheet.supervisorwise_serial,
salary_sheet.employee_type_id,salary_sheet.sl,salary_sheet.cl,salary_sheet.el,salary_sheet.basic,salary_sheet.hr,
salary_sheet.medical,salary_sheet.other,salary_sheet.total,salary_sheet.min_wages,
salary_sheet.prod_wages,salary_sheet.attn_bonus,salary_sheet.prod_bonus,
salary_sheet.ot_hours,salary_sheet.ot_rate,salary_sheet.ot_amount,salary_sheet.stamp_deduct,
salary_sheet.absent_deduction,salary_sheet.net_payable,
employee.employee_code,employee.employee_name,employee.designation_id,employee.employee_grade,
attendance_summery.working_days
from salary_sheet
left join employee
on salary_sheet.employee_id = employee.employee_id
left join attendance_summery
on salary_sheet.payment_period_id = attendance_summery.payment_period_id
where salary_sheet.employee_type_id = 9 and salary_sheet.payment_period_id = 41
order by salary_sheet.supervisorwise_serial desc
The first Left Join takes on the left the sheet rows that are of employee_type_id 9 and payment_period_id 41. All of those sheets are retained. And on the right side of the left join, all the rows come whether or not they exist for those employees ( that is what a left join does ). So they come if there, or null values if not there.
The result of that first step is the table on a left join, doing the same to table attendance_summary.
So yes, left joins have a duplicative effect to say the least, when you inadvertently make a mistake.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.