Как сделать запрос, чтобы получить различимые значения?

У меня есть приложение с 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

}

Как я могу сделать запрос для получения этих результатов?

0

Решение

Как насчет использования некоторых LEFT JOINs, 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.

0

Другие решения

Других решений пока нет …