AFTER INSERT触发器内的SELECT count()不正确

时间:2014-08-22 13:56:39

标签: mysql sql triggers

我有一个AFTER INSERT触发器,看起来像这样。

BEGIN
    SET @newcompany = NEW.company_id; 
    IF NEW.company_id is not null THEN

        SET @my_result = (SELECT count(*) FROM wp_wysija_user u
            LEFT JOIN wp_pods_company c ON c.id = u.company_id
            LEFT JOIN wp_podsrel rel ON c.id = rel.item_id
            WHERE rel.field_id=3384 AND rel.related_item_id=5 AND u.company_id = @newcompany);

        INSERT INTO wp_wysija_user_list(list_id, user_id, sub_date)
        VALUES (5, NEW.user_id, UNIX_TIMESTAMP());

        IF @my_result > 0 THEN
            INSERT INTO wp_wysija_user_list(list_id, user_id, sub_date)
            VALUES (7, NEW.user_id, UNIX_TIMESTAMP());
        END IF;     
    END IF;
END

我的问题是@my_result始终为0.如果我在触发器外运行查询,我得到正确的计数。起初我认为变量@newcompany没有得到一个值。但我已经检查过了。

我需要帮助!

1 个答案:

答案 0 :(得分:0)

不明白你为什么使用LEFT join ????

    BEGIN
SET @newcompany = NEW.company_id; 
IF NEW.company_id is not null THEN

    SET @my_result = (SELECT count(*) FROM wp_wysija_user u
        LEFT JOIN wp_pods_company c ON c.id = u.company_id
        LEFT JOIN wp_podsrel rel ON c.id = rel.item_id and rel.field_id=3384 AND        
                                                           rel.related_item_id=5
        WHERE  u.company_id = @newcompany);

    INSERT INTO wp_wysija_user_list(list_id, user_id, sub_date)
    VALUES (5, NEW.user_id, UNIX_TIMESTAMP());

    IF @my_result > 0 THEN
        INSERT INTO wp_wysija_user_list(list_id, user_id, sub_date)
        VALUES (7, NEW.user_id, UNIX_TIMESTAMP());
    END IF;     
END IF;

END