2017-04-12 91 views
0

我是新来的mysql触发器。刚开始周围的事物,我的头让我明白了,如果事情可能不正确编码或COALESCE mysql的触发返回错误值

我想要做的是后一个数据库条目已被添加到联接表通过提交值的最有效的途径:)创建全文搜索的文本字符串,因为我无法在多个表中进行全文搜索。我可以通过添加得到我想要的那句话,””,以后每次IF语句来获取空间值之间,但我宁愿+空间(1),因为如果该值为null,则有可能是不必要的空间。然而,+空间(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 

回答

0

使用CONCAT用于追加字符串的函数。例如:

COALESCE(CONCAT(make.make_name , space(1)),'') 

操作员+为算术操作('a' + 'b'返回0)。

+0

谢谢伊戈尔!就是我以后的事!我不相信它不会发生在我身上。 – JonasJ