$outputData = [];
foreach ($inputData as $day) {
$currentDayType = $dayType[$day['date']] ?? WORKDAY;
$data = [
'name' => $day['fio'],
'date' => $day['date'],
'type' => $currentDayType,
];
switch ($currentDayType) {
case HOLIDAY:
$data['hours'] = $day['hours']; // calculate for holiday
break;
case SHORTDAY:
$data['hours'] = $day['hours']; // calculate for shortday
break;
case WORKDAY:
$data['hours'] = $day['hours']; // calculate for workday
break;
default:
// unknown type of day, need exception
}
$outputData[] = $data;
}
<?php
define('WORKDAY',0);
define('SHORTDAY',1);
define('HOLIDAY',2);
$dayName = [
WORKDAY => 'Рабочий день',
SHORTDAY => 'Сокращенный день',
HOLIDAY => 'Нерабочий день',
];
$dayType = [
'08.05.2019' => SHORTDAY,
'09.05.2019' => HOLIDAY,
'10.05.2019' => HOLIDAY,
'11.05.2019' => HOLIDAY,
];
$inputData = [
[ 'date'=>'06.05.2019', 'fio'=>'', 'hours'=>0 ],
[ 'date'=>'07.05.2019', 'fio'=>'', 'hours'=>8 ],
[ 'date'=>'08.05.2019', 'fio'=>'', 'hours'=>7 ],
[ 'date'=>'09.05.2019', 'fio'=>'', 'hours'=>0 ],
];
$outputData = [];
foreach ($inputData as $day) {
$data = [
'name' => $day['fio'],
'date' => $day['date'],
];
if ( isset($dayType[$day['date']]) ) {
if ($dayType[$day['date']] === HOLIDAY) {
$data['type'] = HOLIDAY;
$data['hours'] = $day['hours']; // calculate for holiday
} else if ($dayType[$day['date']] === SHORTDAY) {
$data['type'] = SHORTDAY;
$data['hours'] = $day['hours']; // calculate for shortday
} else {
// unknown type of day, need exception
}
} else {
$data['type'] = WORKDAY;
$data['hours'] = $day['hours']; // calculate for workday
}
$outputData[] = $data;
}
// Print result
foreach ($outputData as $row) {
echo "<tr><td>${row['name']}</td>";
echo "<td>${row['hours']}</td>";
echo "<td>${row['date']}</td>";
echo "<td>${dayName[$row['type']]}</td></tr>";
}
select
concat(
case when t3.name is null then '' else concat(t3.name,'>') end,
case when t2.name is null then '' else concat(t2.name,'>') end,
case when t1.name is null then '' else t1.name end
) path
from test1 t1
left join test1 t2 on t2.id=t1.pid
left join test1 t3 on t3.id=t2.pid
Дальше больше, программист будет и кодить, и процедуры писать? Или нужно набирать отдельно для этого специалистов по процедурному языку? Вопрос финансов. Когда база просто хранилище и проблемы в ней попроще, а когда это множество процедур (кстати, их даже систематизировать гораздо сложнее), то проблемы уже такие, что нужен опытный DBA.
Имхо, лучше перетягивать логику в БД, когда есть четкое понимание зачем это нужно. Но в большинстве случаев, когда нужна быстрая разработка и хорошо сопровождаемый код, то я бы задействовал БД по-минимуму. И это мы еще не говорили о переезде на другую базу и горизонтальном масштабировании.