Я знаю, что уже есть некоторые ответы на этот вопрос, но ни один из них, похоже, не работает для меня.
В принципе, у меня есть задачи, которые представляют собой не что иное, как предустановки, запланированные с течением времени: я хочу обновитьдата выполнения задач при достижении сроков;также, когда я достигаю крайнего срока, мне нужно обновить значения таблицы компонентов в соответствии с предустановленными значениями.
Я успешно выполнил запрос на обновление крайних сроков, который выглядит следующим образом:
UPDATE tasks
SET tasks.start_date = DATE_ADD(
tasks.start_date, INTERVAL tasks.frequency SECOND
)
WHERE tasks.start_date <= CURRENT_DATE AND tasks.hour <= CURRENT_TIME
Когда я пытаюсь обновить строки компонентов одновременно со сроками, я не могу заставить их работать.Мой запрос выглядит так:
UPDATE tasks,components
INNER JOIN presets ON presets.id = tasks.id_preset
INNER JOIN preset_values ON preset_values.id_preset = presets.id
INNER JOIN preset_values AS pv2 ON pv2.serial_number =
components.serial_number
SET tasks.start_date = DATE_ADD(
tasks.start_date, INTERVAL tasks.frequency SECOND
),
components.value = pv2.value,
components.state = pv2.on_off
WHERE tasks.start_date <= CURRENT_DATE AND tasks.hour <= CURRENT_TIME
Я получаю сообщение об ошибке: MySQL сказал: Documentation
1054 - Неизвестный столбец 'tasks.id_preset' в 'предложении'
Можете ли вы помочь мне заставить этот запрос работать?спасибо
таблица компонентов: https://i.stack.imgur.com/VOZX8.png
таблица предустановок: https://i.stack.imgur.com/Fs7yO.png
таблица preset_values: https://i.stack.imgur.com/AZkcm.png
таблица задач: https://i.stack.imgur.com/0qSEe.png
РЕДАКТИРОВАТЬ : дважды подумав, я выбрал два отдельных запроса на обновление.В настоящее время это выглядит так.Если у кого-то есть одно решение для обновления, я буду рад его использовать, если оно лучше по производительности.В противном случае я буду придерживаться этого решения на данный момент.Спасибо всем за вашу помощь.
BEGIN
UPDATE
components AS c1
INNER JOIN preset_values AS pv1
ON
pv1.serial_number = c1.serial_number
INNER JOIN tasks AS t1
ON
t1.id_preset = pv1.id_preset
SET
c1.value = pv1.value,
c1.state = pv1.on_off
WHERE
t1.start_date <= CURRENT_DATE AND t1.hour <= CURRENT_TIME AND t1.on_off=1;
UPDATE
tasks
SET
tasks.start_date = DATE_ADD(
tasks.start_date,
INTERVAL tasks.frequency SECOND
)
WHERE
tasks.start_date <= CURRENT_DATE AND tasks.hour <= CURRENT_TIME AND t1.on_off=1 ;
END