COALESCE mysql触发返回错误的值

时间:2017-04-12 16:07:38

标签: mysql triggers

我是mysql触发器的新手。只是让我的头脑周围的东西所以我明白,如果某些东西可能没有正确编码或最有效的路线:)

我想要做的是在添加数据库条目以通过提交的值来加入表格以创建用于全文搜索的文本字符串,因为我无法跨多个表格进行全文搜索。我可以通过添加来获得我想要的句子,' ',在每个IF语句之后获取值之间的空格但是我更喜欢+ space(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

1 个答案:

答案 0 :(得分:0)

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

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

运算符+用于算术运算('a' + 'b'返回0)。