【问题标题】:COALESCE mysql trigger returning wrong valueCOALESCE mysql触发器返回错误值
【发布时间】: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

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢伊戈尔!正是我所追求的!不敢相信我没想到。
    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多