Вот структура таблицы.YII2 получить дату после 10 лет и 5 лет
tbl_staff
firstname varchar(50)
midname varchar(50)
lastname varchar(50)
...
tbl_staff2
first_day_of_service date
...
Вот сценарий. В течение первых 10 лет пребывания персонала в организации он получает награду за лояльность, а затем каждые 5 лет после получения первых 10 лет.
Мой первоначальный код просто получит имя персонала и дату первого дня службы.
public function actionGet_loyalty() {
$query = (new \yii\db\Query())
->select(['firstname', 'midname', 'lastname', 'first_day_service'])
->from('tbl_staff')
->limit(100)
->offset(0)
->orderBy('first_day_service')
->leftJoin('tbl_staff2', 'tbl_staff2.staff_id = tbl_staff.id');
$command = $query->createCommand();
$data = $command->queryAll();
$string = "<table class='table table-striped'><tr><th>No.</th><th>Name</th><th>Date to Receive Loyalty Award</th></tr>";
$i = 1;
foreach ($data as $row) {
$firstname = $row['firstname'];
$midname = $row['midname'];
$lastname = $row['lastname'];
//$string.=$row['first_day_service'];
$string.="<tr>"
. "<td>$i</td>"
. "<td>" . $firstname . " " . $midname[0] . ". " . $lastname . "</td>"
. "<td>" . $row['first_day_service'] . "</td>"
. "</tr>";
$i++;
}
$string.="</table>";
return $string;
}
Как отобразить все имя сотрудника и дату, когда он/она получит награду в порядке возрастания.
Или любой запрос mysql, который будет сортировать имя по дате?
но проблема заключается в том, что она должна быть 10years в первый раз затем каждые 5 лет вперед. Хорошо ли просто сделать функцию mysql, которая вернет дату следующей награды, тогда вызовите эту функцию в запросе и установите 'order by' на эту функцию? – beginner
@quickbrownfox Он может быть рассчитан как с MySQL, так и с PHP. Это зависит от вас и зависит от ситуации. – arogachev