他の列の値に基づいて1つの列の値を計算するトリガーを作成する必要があります。データベースは、より高いパフォーマンスを得るために少し非正規化されています。 (正規化はこの問題の問題ではない)。MySqlトリガーは計算されません
問題は、computed_address値の値を設定したいのですが、定数を入れても問題ありません。しかし、これらのIf節は機能していないようで、私は問題を見ることができません。
以下はトリガーコードです。 ありがとうございます!あなたのトリガコード
END;
$$
DELIMITER ;
の下部に
DELIMITER $$
USE `nth_poi_new_3`$$
DROP TRIGGER /*!50032 IF EXISTS */ `poi_address_creator`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `poi_address_creator` BEFORE INSERT ON `poi`
FOR EACH ROW BEGIN
DECLARE full_address VARCHAR(255);
DECLARE country_string VARCHAR(100);
DECLARE region_string VARCHAR(100);
DECLARE town_string VARCHAR(100);
DECLARE address_string VARCHAR(100);
IF NEW.address <> '' THEN
SET full_address = CONCAT(NEW.address, ",");
END IF;
IF NEW.town_name IS NOT NULL THEN
SET full_address = CONCAT(full_address, NEW.town_name, ",");
ELSEIF NEW.town_id IS NOT NULL THEN
SELECT NAME INTO town_string FROM town WHERE town.town_id = NEW.town_id LIMIT 1;
SET full_address = CONCAT(full_address, town_string, ",");
END IF;
IF NEW.region_name IS NOT NULL THEN
SET full_address = CONCAT(full_address, NEW.region_name, ",");
ELSEIF NEW.region_id IS NOT NULL THEN
SELECT NAME INTO region_string FROM region WHERE region.region_id = NEW.region_id LIMIT 1;
SET full_address = CONCAT(full_address, region_string, ",");
END IF;
IF NEW.country_name IS NOT NULL THEN
SET full_address = CONCAT(full_address, NEW.country_name, ",");
ELSEIF NEW.country_id IS NOT NULL THEN
SELECT NAME INTO country_string FROM country WHERE country.country_id = NEW.country_id LIMIT 1;
SET full_address = CONCAT(full_address, country_string, ",");
END IF;
SET NEW.computed_address = full_address;
END;
$$
DELIMITER ;
:
しかし、宣言の後に、それはまた、初期化する必要がありました。私はこれを作りました。 – ijw