У меня есть триггер INSERT INTO, который я хотел бы, чтобы часть SELECT оценивала значение поля (RDO) и возвращала значение в SchedStatus в соответствии со значением RDO "выходные дни" по сравнению с DAYNAME даты, назначенной дляродительский график.Само расписание создается в цикле while документа php (что хорошо работает).Ниже приведены две мои попытки оценить значение RDO:
INSERT INTO sched_personnel (Sched_Shift_ID, UnitNumber, SupervisorNumber, Rank, Lunch, Assignment, Shift, Squad, RDOs, SchedStatus)
SELECT NEW.Sched_Shift_ID, UnitNumber, SupervisorNumber, Rank, Lunch, Assignment, Shift, Squad, RDO, @SchedStatus
CASE
WHEN RDO = 'SAT/SUN' AND (DAYNAME(NEW.ShiftDate) = 'Saturday' OR DAYNAME(NEW.ShiftDate) ='Sunday') THEN 'OFF'
WHEN RDO = 'SUN/MON' AND (DAYNAME(NEW.ShiftDate) = 'Sunday' OR DAYNAME(NEW.ShiftDate) ='Monday') THEN 'OFF'
WHEN RDO = 'MON/TUE' AND (DAYNAME(NEW.ShiftDate) = 'Monday' OR DAYNAME(NEW.ShiftDate) ='Tuesday') THEN 'OFF'
WHEN RDO = 'TUE/WED' AND (DAYNAME(NEW.ShiftDate) = 'Tuesday' OR DAYNAME(NEW.ShiftDate) ='Wednesday') THEN 'OFF'
WHEN RDO = 'WED/THU' AND (DAYNAME(NEW.ShiftDate) = 'Wednesday' OR DAYNAME(NEW.ShiftDate) ='Thursday') THEN 'OFF'
WHEN RDO = 'THU/FRI' AND (DAYNAME(NEW.ShiftDate) = 'Thursday' OR DAYNAME(NEW.ShiftDate) ='Friday') THEN 'OFF'
WHEN RDO = 'FRI/SAT' AND (DAYNAME(NEW.ShiftDate) = 'Friday' OR DAYNAME(NEW.ShiftDate) ='Saturday') THEN 'OFF'
ELSE 'ONS'
END AS @SchedStatus
FROM accounts
WHERE accounts.Shift = NEW.Shift AND accounts.AccountStatus = 'Active';
Я также попытался:
INSERT INTO sched_personnel (Sched_Shift_ID, UnitNumber, SupervisorNumber, Rank, Lunch, Assignment, Shift, Squad, RDOs, SchedStatus)
SELECT NEW.Sched_Shift_ID, UnitNumber, SupervisorNumber, Rank, Lunch, Assignment, Shift, Squad, RDO, @SchedStatus
CASE
WHEN RDO = 'SAT/SUN' AND DAYNAME(NEW.ShiftDate) IN ('Saturday', 'Sunday') THEN 'OFF'
WHEN RDO = 'SUN/MON' AND DAYNAME(NEW.ShiftDate) IN ('Sunday', 'Monday') THEN 'OFF'
WHEN RDO = 'MON/TUE' AND DAYNAME(NEW.ShiftDate) IN ('Monday', 'Tuesday') THEN 'OFF'
WHEN RDO = 'TUE/WED' AND DAYNAME(NEW.ShiftDate) IN ('Tuesday', 'Wednesday') THEN 'OFF'
WHEN RDO = 'WED/THU' AND DAYNAME(NEW.ShiftDate) IN ('Wednesday', 'Thursday') THEN 'OFF'
WHEN RDO = 'THU/FRI' AND DAYNAME(NEW.ShiftDate) IN ('Thursday', 'Friday') THEN 'OFF'
WHEN RDO = 'FRI/SAT' AND DAYNAME(NEW.ShiftDate) IN ('Friday', 'Saturday') THEN 'OFF'
ELSE 'ONS'
END AS @SchedStatus
FROM accounts
WHERE accounts.Shift = NEW.Shift AND accounts.AccountStatus = 'Active';
Я получаю сообщение об ошибке:
Ошибка SQL (1064):У вас есть ошибка в вашем синтаксисе SQL;проверьте правильность синтаксиса для руководства, соответствующего версии вашего сервера MySQL, рядом с 'CASE WHEN RDO =' SAT / SUN 'и именем дня (NEW.Shift Date) IN (' суббота ',' воскресенье ') в строке 4.
Если я исключу часть запроса CASE, дочерние записи будут добавлены в каждую родительскую запись, созданную без ошибок.Желаемым конечным состоянием является вставка каждой дочерней записи (sched_perssonel), имеющей SchedStatus, которая соответствует RDO индивидуума по умолчанию, следовательно, CASE оценивает RDO по сравнению с датой расписания (tabel sched_shift).Я не могу получить дело, когда правильно.
Спасибо за помощь.