У меня есть приложение с 4 таблицами:
Сотрудники -> Компании -> Дополнительные услуги -> Долги
Мне нужно сгенерировать следующую квитанцию о зарплате:
В этом документе я должен показать всю дискриминированную информацию как SALARY, ее стоимость и сборы. И, наконец, чистая стоимость между добавками и долгами.
Я сделал этот пример:
$total_additional= 0;
$total_debt= 0;
// Here in employees contains a join between employees and companies
foreach ($employees as $employee) {
foreach ($additionals as $additional) {
if ( $employee->id == $additional->employee_id ) {
//Print the additional reference
$total_additional += $additional->value;
}
}
foreach ($debts as $debt) {
if ( $employee->id == $debt->employee_id ) {
//Print the debt reference
$total_debt += $debt->value;
}
}
// Here should come the net value
}
Как я могу сделать запрос для получения этих результатов?
Как насчет использования некоторых LEFT JOIN
s, GROUP BY
пункт и SUM
агрегации, чтобы получить все данные в одном запросе без необходимости цикла в PHP?
SELECT employees.id, employees.name,
GROUP_CONCAT(additionals.value SEPARATOR '|') as additionals_values, SUM(additionals.value) as total_additional
FROM employees
LEFT JOIN additionals ON additionals.employee_id = employees.id
GROUP BY employees.id, employees.name;
SELECT employees.id, employees.name,
GROUP_CONCAT(debts.value SEPARATOR '|') as debts_values, SUM(debts.value) as total_debt
FROM employees
LEFT JOIN debts ON debts.employee_id = employees.id
GROUP BY employees.id, employees.name;
В использовании PHP explode('|'...
иметь массив отдельных значений. Чистая стоимость может быть рассчитана с помощью 3-го запроса или в PHP.
Других решений пока нет …