вопрос относительно использования триггеров MySQL - PullRequest
0 голосов
/ 15 мая 2011

Я видел упомянутые триггеры MySQL, и мне любопытно, могут ли они быть использованы для моего сценария.То есть:

допустим, у меня есть таблица results_tb.В настоящее время есть поле score и поле grade.Так можно ли использовать триггеры для обновления оценки в случае изменения оценки?

. Например, допустим, что сохраненная оценка равна 40, оценка обновляется до C, а затем, если оценка обновляется до 70,оценка обновляется до A.

возможно ли это с помощью триггеров?

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Вы можете использовать триггер, если хотите, однако, я согласен с Nanne с точки зрения того, что кажется лучшим подходом в описанной ситуации.

DELIMITER |

DROP TRIGGER /*!50032 IF EXISTS */ `trigger_update_results_tb`|

CREATE TRIGGER `trigger_update_results_tb` BEFORE UPDATE ON `results_tb` 
    FOR EACH ROW BEGIN
       CASE FLOOR(NEW.score / 10)
        WHEN 0 THEN SET NEW.grade = 'F';
        WHEN 1 THEN SET NEW.grade = 'F';
        WHEN 2 THEN SET NEW.grade = 'F';
        WHEN 3 THEN SET NEW.grade = 'F';
        WHEN 4 THEN SET NEW.grade = 'D';
        WHEN 5 THEN SET NEW.grade = 'C';
        WHEN 6 THEN SET NEW.grade = 'B';
        ELSE SET NEW.grade = 'A';
       END CASE;
    END;
|

DELIMITER ;
1 голос
/ 15 мая 2011

Ну, вы можете создать trigger, который запускается при «обновлении».Руководство вполне понятно.Но вам придется составить своего рода «список» оценок, соответствующих вашим оценкам.Таким образом, у вас есть что-то из списка, который сравнивает оценки с оценками.Для меня это звучит подозрительно, как «справочная таблица».

Не могли бы вы просто добавить таблицу с оценками, которые относятся к определенному баллу, в вашу базу данных, и если вы запрашиваете текущий results_tb, добавьтеjoin к этому столу?

Так что вместо

SELECT score, grade FROM results_tb WHERE id=1

вы получите

SELECT r.score, l.grade FROM results_tb r 
JOIN lookup l ON r.score = l.score
WHERE r.id=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...