mysql - COALESCE mysql触发器返回错误值

标签 mysql triggers

我是 mysql 触发器的新手。只是让我的头脑思考一些事情,以便我了解某些内容是否可能未正确编码或最有效的路线:)

我想做的是在添加数据库条目后通过提交的值连接表以创建用于全文搜索的文本字符串,因为我无法跨多个表进行全文搜索。我可以通过在每个 IF 语句之后添加 ,' ', 来获得我想要的句子,以获取值之间的空格,但我更喜欢 + space(1),因为如果值为 null,则将存在不必要的空格。然而 + space(1) 或 + ' ' 函数似乎返回一个零而不是值 + 一个空格。 未定义的 Action 是为了避免创建的句子中出现默认值。

希望这是有道理的,很难解释!

我的代码如下:

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

最佳答案

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

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

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

关于mysql - COALESCE mysql触发器返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43374581/

相关文章:

python - 如何使 python 对象 json 序列化?

java - Hibernate实体中的复合@NaturalId

sql-server - 如何在触发器中执行SQL Server中安装的SSIS包

列中定义的 PostgreSQL 函数

php - 删除一行或多行后,在 auto_increment 列上使用下一个可能的主键

php - 优化MYSQL、PHP搜索前几天这个时间的记录

MySQL 自连接花费的时间太长——我可以简化这个查询吗?

mysql - 通过复制从 MySQL 主机中删除不同步的数据

mysql - SUBSTRING_INDEX' 错误

mysql - 创建 MySQL 触发器时出现语法错误