【发布时间】:2016-11-07 05:47:33
【问题描述】:
我正在编写一个将数据从表 data_entry 复制到另一个表 promotional 的过程
data_entry的表结构如下(排除非相关字段)-
CREATE TABLE `data_entry` (
`school_id` int(11) NOT NULL AUTO_INCREMENT,
`school_name` varchar(255) NOT NULL,
`mobile_number` varchar(15) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`website` varchar(255) DEFAULT NULL,
`city` varchar(250) DEFAULT NULL,
`pin` varchar(6) DEFAULT NULL,
`is_copied_to_promo` tinyint(4) DEFAULT '0'
PRIMARY KEY (`school_id`)
)
promotional的表结构(排除非相关字段)
CREATE TABLE `promotional` (
`promo_id` int(11) NOT NULL AUTO_INCREMENT, //renamed to avoid confusion
`school_name` varchar(255) NOT NULL,
`mobile_number` varchar(15) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`website` varchar(255) DEFAULT NULL,
`city` varchar(250) DEFAULT NULL,
`pin` varchar(6) DEFAULT NULL,
`copied_school_id` INT, // edit - school_id of data_entry table will go here
PRIMARY KEY (`promo_id`)
)
这是将所有行从data_entry 复制到promotional 的过程,其中is_copied_to_promo=0。
程序
CREATE PROCEDURE `uspCopySchoolsToPromotional`(IN param_insert_datetime DATETIME)
BEGIN
INSERT IGNORE INTO promotional (
school_name,
mobile_number,
email,
website,
city,
pin,
copied_school_id
)
SELECT school_name,
mobile_number,
email,
website,
city,
pin,
school_id
FROM data_entry
WHERE is_copied_to_promo =0 ;
END;
我现在想要将data_entry 表中的is_copied_to_promo 更新为1,以更新上述过程中所有插入/受影响的行,以便每次执行上述过程时,只有data_entry 表中的新行复制到促销。
我通过PHP 代码调用此过程。解决方案可以是在同一过程中添加更新查询,也可以在执行uspCopySchoolsToPromotional 后运行另一个查询/过程。
提前致谢。
编辑:
我忘了提到两个表中的 school_id 是不同的。在促销表中,数据来自多个来源。所以我在促销表中将school_id 重命名为promo_id 以避免您的混淆。
【问题讨论】:
标签: php mysql stored-procedures insert-update