我是 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/