我写了个触发器
create trigger update_hudcs 
before insert on house_upload_data_contrast_standard for each row
begin
SET @bak_id = (SELECT CASE WHEN MAX(hudcsh_id) IS NULL THEN 1 ELSE MAX(hudcsh_id)+1 END AS id FROM  house_upload_data_contrast_standard_history);
SET NEW.hudcsh_id = @bak_id;
IF NEW.price_max IS NULL OR NEW.price_max = '' OR NEW.price_max = 0
THEN SET NEW.price_max = NEW.price_standard*(1+NEW.float_rate);
END IF;
IF NEW.price_min IS NULL OR NEW.price_min = '' OR NEW.price_min = 0
THEN SET NEW.price_min = NEW.price_standard*(1-NEW.float_rate);
END IF;
INSERT INTO house_upload_data_contrast_standard_history (hudcsh_id,property_id,unit_id,agent_vip,agent_id,staff_id,unit_grade,linkman,tel,email,asking_type,sales_status,lease_status,property_tag,villa_type,unit_size,unit_usable_size,block,building,flat,catmain_id,unit_deco,total_living,total_bed,dollar_price,dollar_rent_price,price_asking,rent_asking,status,time_created,vl_approve)
(SELECT NEW.hudcsh_id,ud.property_id,ud.unit_id,ud.agent_vip,ud.agent_id,ud.staff_id,ud.unit_grade,ud.linkman,ud.tel,ud.email,ud.asking_type,ud.sales_status,ud.lease_status,ud.property_tag,ud.villa_type,ud.unit_size,ud.unit_usable_size,ud.block,ud.building,ud.flat,ud.catmain_id,ud.unit_deco,ud.total_living,ud.total_bed,ud.dollar_price,ud.dollar_rent_price,ud.price_asking,ud.rent_asking,ud.status,NOW(),ud.vl_approve
FROM unit_detail ud
JOIN property p ON (ud.property_id = p.property_id AND p.city_id = NEW.city_id AND p.district_id = NEW.district_id AND p.zone_id = NEW.zone_id AND p.property_graded = NEW.property_graded)
WHERE ud.catmain_id = NEW.catmain_id AND ud.villa_type = NEW.tag_id AND ud.unit_size >= NEW.price_min AND ud.unit_size <= NEW.price_max );
END;
触发器运行正确,但是不能向表house_upload_data_contrast_standard_history 中插入数据(应该是可以搜出数据插入这个表的),请问是不是在这个insert语句中不能用 NEW.catmain_id之类的东西啊。请高人指点啊。

解决方案 »

  1.   


    catmain_id 是什么类型? auto_increment ? 如果是,则无法,auto_increment 需要在表记录提交后才会有。
    给你的create table 语句,否则别人无法模拟你的问题建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
    问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  2.   

    表的结构为:CREATE TABLE `house_upload_data_contrast_standard` (
      `hudcs_id` int(6) NOT NULL auto_increment COMMENT '表的主键,自增长',
      `hudcsh_id` int(20) NOT NULL COMMENT '表house_upload_data_contrast_standard_history的hudcsh_id',
      `city_id` varchar(20) NOT NULL COMMENT '城市ID',
      `district_id` varchar(20) NOT NULL COMMENT '区域ID',
      `zone_id` char(50) NOT NULL COMMENT '板块ID',
      `catmain_id` int(6) NOT NULL COMMENT '类型ID',
      `tag_id` varchar(20) default NULL COMMENT '描述类别ID',
      `property_graded` float NOT NULL COMMENT '项目等级',
      `area_section` varchar(80) NOT NULL COMMENT '面积区间(分为:<90平米,91-140平米,141-200平米,201-280平米,281-350平米,>350平米)',
      `price_standard` float NOT NULL COMMENT '标准价格(用于判断的标准价格)',
      `price_max` float default NULL COMMENT '标准价格上浮比率float_rate后所形成的价格',
      `price_min` float default NULL COMMENT '标准价格下浮比率float_rate后所形成的价格',
      `asking_type` enum('r','s') NOT NULL COMMENT '价格是租的还是售的',
      `float_rate` float default NULL COMMENT '从标准价格price_standard可以上下浮动的比率',
      `time_created` date NOT NULL COMMENT '数据建立时间',
      `time_modified` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '数据更新时间(即时更新)',
      `bool_approved` enum('y','n') default 'n' COMMENT '数据是否经过审批(’y’经过审批,’n’未经过审批)',
      PRIMARY KEY  (`hudcs_id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1303 DEFAULT CHARSET=utf8 COMMENT='用作存储,数据控制时的标准对比数据。用法为将每期的每类的对比数据插入这个表,取最大hudcs_id的为最新的标准数,想看' AUTO_INCREMENT=1303 ;