ktsirig Ответов: 0

Правильно построить триггер mysql


У меня есть следующие две таблицы:

Таблица 1:
+-----------------------------+--------------------------------------+------+-----+---------+-------+
| Field                       | Type                                 | Null | Key | Default | Extra |
+-----------------------------+--------------------------------------+------+-----+---------+-------+
| patient_id                  | bigint(20)                           | NO   | PRI | NULL    |       |
| patient_wpid                | int(11)                              | NO   | PRI | NULL    |       |
| age_at_visit                | int(11)                              | YES  |     | NULL    |       |
| sex                         | enum('male','female')                | YES  |     | NULL    |


Таблица 2
+-------------------------+----------------------------+------+-----+---------+----------------+
| Field                   | Type                       | Null | Key | Default | Extra          |
+-------------------------+----------------------------+------+-----+---------+----------------+
| patient_id              | bigint(20)                 | NO   | PRI | NULL    |                |
| patient_wpid            | int(11)                    | NO   | PRI | NULL    |                |
| weight                  | text                       | YES  |     | NULL    |                |
| creatinine              | text                       | YES  |     | NULL    |                |
| eGFR                    | varchar(100)               | YES  |     | N/A     |                |
+-------------------------+----------------------------+------+-----+---------+----------------+


Что мне нужно сделать, так это после вставки в таблицу 2 выполнить следующее:

1. Выберите пункт
age_at_visit
и
sex
значения из таблицы 1, для данного
patient_id
и
patient_wpid
(эти поля имеют одинаковые значения как в таблице 1, так и в таблице 2, и таблица 1 была заполнена до таблицы 2)

2. Используйте вставленные значения
weight
и
creatinine
в таблице 2 и вычислить формулу, чтобы произвести и последовательно сохранить значение для
eGFR
столбец из таблицы table2.
Формула выглядит следующим образом:

eGFR = 175 × (creatinine)^(-1.154) × (age)^(-0.203) × (0.742 if female)



Не могли бы вы помочь мне исправить это?
Спасибо!

Что я уже пробовал:

Итак, то, что я написал (и произвел довольно много ошибок, так как это моя самая первая попытка с триггерами), заключается в следующем:

delimiter //
CREATE TRIGGER calcEGFR AFTER INSERT ON Table2
FOR EACH ROW
BEGIN
    SELECT age_at_visit, sex FROM Table1 WHERE (Table1.patient_wpid = Table2.patient_wpid AND Table1.patient_id = Table2.patient_id)
    SET @creatinine_power := SELECT POWER(creatinine,-1.154);
    SET @age_power := SELECT POWER(Table1.age_at_visit,-0.203);
    IF Table1.sex = 'female' THEN
        SET @sex_addition := 0.742
    END IF;
    IF Table1.sex = 'male' THEN
        SET @sex_addition := 1
    END IF;

    SET @eGFR_value := (175 * @creatinine_power * @age_power * @sex_addition)
    UPDATE Table2 SET eGFR = @eGFR_value;
END;//
delimiter ;

k5054

Хотя MySQL, кажется, позволяет математику на нечисловых столбцах, используя text или varchar() для столбцов, которые должны иметь только числовые значения, это может привести к проблемам в будущем.

Пожалуйста, дайте нам некоторое представление о том, какие ошибки вы получаете с вашим кодом. Мы не читаем мысли, и большинство из нас, вероятно, не будет пытаться воссоздать вашу схему, чтобы помочь вам.

0 Ответов