ОБНОВЛЯТЬ столбец возраста в БД каждый день на основе результата JavaScript

#javascript #mysql #sql

#javascript #mysql #sql

Вопрос:

Я пытаюсь обновлять возраст каждый день в полночь. В настоящее время в таблице три столбца: id, DOB и возраст. Пользователь вводит DOB (формат ГГГГММДД), из которого я вычисляю возраст и вставляю в БД.

введите описание изображения здесь

Код JS для вычисления возраста:

    calculateAge(birthDate) {
        let year = birthDate.slice(0,4);
        let month = birthDate.slice(4,6);
        let day = birthDate.slice(6);

        birthDate = year   '/'   month   '/'   day;

        birthDate = new Date(birthDate);
        let today = new Date();

        var years = (today.getFullYear() - birthDate.getFullYear());

        if (today.getMonth() < birthDate.getMonth() || 
            today.getMonth() == birthDate.getMonth() amp;amp; today.getDate() < birthDate.getDate()) {
            years--;
        }
    
        return years;
    }
 

Как только он станет 2021/02/11, как мне убедиться, что возраст для id = 2 изменится на 31?

Мои мысли о необходимых шагах :

  1. Получите все данные
 let data = connection.query('SELECT * FROM my_table_name');
 
  1. вычислите новый возраст
 for(let i = 0; i < data.length; i  ) {
  data[i].age = calculateAge(data[i].DOB);
}
 
  1. Вставьте обновленный возраст обратно в БД
 CREATE EVENT update_age
    ON SCHEDULE
      EVERY 1 DAY 
      STARTS '2021-02-11 00:00:00'
    DO
UPDATE my_table_name 
SET age = ?  
WHERE 
... ;
 

Шаг 3 — это то, где я сейчас застрял.
Прежде всего, мне нужен Javascript для ежедневного выполнения шагов 1 и 2…Как бы я это реализовал? Во-вторых, поскольку я в основном обновляю всю базу данных, я не знаю, какое условие должно быть указано be..in другими словами, как мне указать базе данных УСТАНОВИТЬ возраст = 31, где id = 2?

Комментарии:

1. Измените DOB столбец на правильный формат даты . Любая веская причина, по которой значение даты должно быть таким? И я поддерживаю мнение о том, чтобы извлекать возраст с помощью запроса, а не хранить его в БД.

Ответ №1:

Хранение возраста в базе данных усложняет это и может привести к проблемам, если, например, ежедневное задание по обновлению возраста не выполняется.

Я бы вообще удалил столбец возраста из базы данных и просто вычислил возраст с даты рождения при запросе данных.