【发布时间】:2017-09-08 12:46:11
【问题描述】:
我是 mysql 触发器的新手。只是想清楚一些事情,以便我了解某些内容是否编码不正确或最有效的路线:)
我想要做的是在添加数据库条目以通过提交的值加入表以创建用于全文搜索的文本字符串之后,因为我无法跨多个表进行全文搜索。我可以通过在每个 IF 语句之后添加“”来获得我想要的句子,以获取值之间的空格,但我更喜欢 + space(1),因为如果值为 null,那么就会有不必要的空格。然而 + space(1) 或 + ' ' 函数似乎返回一个零而不是值 + 一个空格。 未定义的动作是为了避免在创建的句子中出现默认值。
希望它有道理,很难解释!
我的代码如下:
CREATE TRIGGER `tz_search_term_update` AFTER INSERT
ON `live_db`.`tz_product`
FOR EACH ROW BEGIN
INSERT into tz_search (listing_id) VALUES (NEW.id);
UPDATE tz_search search
INNER JOIN tz_product product ON search.listing_id = product.listing_id
INNER JOIN product_data_make make ON product.make = make.id
INNER JOIN product_data_model model ON product.model = model.id
INNER JOIN product_data_colour colour ON product.colour = colour.id
INNER JOIN product_data_condition cond ON product.cond = cond.id
INNER JOIN product_data_simstatus sim ON product.sim = sim.id
INNER JOIN product_data_spec spec ON product.spec = spec.id
INNER JOIN product_data_capacity capacity ON product.capacity = capacity.id
SET search.term = CONCAT(
IF(make.make_name = 'Unspecified', '', COALESCE(make.make_name + space(1),'')),
IF(model.model_name = 'Unspecified', '', COALESCE(model.model_name + space(1),'')),
IF(colour.colour_name = 'Unspecified', '', COALESCE(colour.colour_name + space(1),'')),
IF(sim.simstatus_name = 'Unspecified', '', COALESCE(sim.simstatus_name + space(1),'')),
IF(spec.spec_name = 'Unspecified', '', COALESCE(spec.spec_name + space(1),'')),
IF(cond.condition_name = 'Unspecified', '', COALESCE(cond.condition_name + space(1),'')),
IF(capacity.capacity_name = 'Unspecified', '', COALESCE(capacity.capacity_name,'')))
WHERE search.listing_id = NEW.listing_id;
END
【问题讨论】: