2017-04-12 10 views
0

私はmysqlトリガを初めて使いました。私は理解して何かが正しくコーディングされていないか、最も効率的なルート:)COALESCE mysqlトリガが間違った値を返す

私は何をしようとしていることは、データベースのエントリの後では、に提出した値を経由してテーブルを結合するために追加されている場合は物事のまわりで私の頭を取得フルテキスト検索用のテキスト文字列を作成して、複数のテーブルにわたって全文検索を行うことはできません。私は、各IF文の後に値の間にスペースを入れるために、 ''を追加することで、必要な文を得ることができますが、値がnullの場合は不要なスペースが存在するため、スペース(1)を優先します。しかし、+ 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 

答えて

0

は、文字列を追加するためCONCAT機能を使用してください。例:

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

オペレータ+は、算術演算('a' + 'b'戻り0)のためのものです。

+0

ありがとうございました。ちょうど私が後にしたもの!それが私には起こらなかったとは信じられません。 – JonasJ

関連する問題