我正在编写一个过程,将数据从一个表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的过程。
程序
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;

我现在要做的是将上述过程中插入/受影响的所有行的is_copied_to_promo=0更新到is_copied_to_promo表中的1以便每次执行上述过程时,只有data_entry表中的新行应复制到promotional。
我通过data_entry代码调用此过程。解决方案可以是在同一个过程中添加更新查询,或者在执行PHP之后运行另一个查询/过程。
提前谢谢。
编辑:
我忘了提到两张桌子上的学校id是不同的。促销表中的数据来自多个来源。所以我在促销表中将uspCopySchoolsToPromotional重命名为school_id,以避免您的混淆。

最佳答案

如果还复制了学校id,则有一个唯一的密钥可供使用,然后可以在插入后添加更新来执行此操作,如:

CREATE PROCEDURE `uspCopySchoolsToPromotional`(IN param_insert_datetime DATETIME)
BEGIN
    INSERT IGNORE INTO promotional (
      school_id,
      school_name,
      mobile_number,
      email,
      website,
      city,
      pin
    )
SELECT school_id,
    school_name,
    mobile_number,
    email,
    website,
    city,
    pin,
FROM data_entry
  WHERE is_copied_to_promo =0 ;

UPDATE data_entry
    SET is_copied_to_promo=1
WHERE
    school_id=(SELECT school_id FROM promotional)
    AND is_copies_to_promo=0;
END;

希望这有帮助:)

关于php - INSERT INTO table2 SELECT FROM table1然后UPDATE table1已选择/插入的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40458565/

10-11 19:53