插入单列的值

时间:2015-02-10 12:34:07

标签: php mysql mysqli

在我的MySQL数据库中,我有两个表:customersfeedbacks

值来自一个小的PHP应用程序。

要显示反馈记录所属的客户,我想将customers.customerID的值插入feedbacks.customerID

只有column (customer.customerID)(feedback.cutomerID)。 这是DDL

@strawbery
-- Table structure for table `customers`
--

CREATE TABLE IF NOT EXISTS `customers` (
  `customerID` int(20) NOT NULL AUTO_INCREMENT,
  `compid` varchar(5) DEFAULT NULL,
  `store` varchar(10) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `contact` varchar(15) DEFAULT NULL,
  `email` varchar(15) DEFAULT NULL,
  `gender` varchar(7) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `fbdate` varchar(10) DEFAULT NULL,
  `sysip` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`customerID`),
  UNIQUE KEY `customerID` (`customerID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
CREATE TABLE IF NOT EXISTS `feedback` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customerID` int(20) NOT NULL,
  `design` varchar(10) NOT NULL,
  `variety` varchar(10) NOT NULL,
  `fabric` varchar(10) NOT NULL,
  `stitch` varchar(10) NOT NULL,
  `size` varchar(10) NOT NULL,
  `service` varchar(10) NOT NULL,
  `experience` varchar(10) NOT NULL,
  `recommend` varchar(20) NOT NULL,
  `comments` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_feedback` (`customerID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

问候

2 个答案:

答案 0 :(得分:2)

基本上,您需要先创建客户 - 如果他们已经不存在的话。

INSERT INTO customers ( ... ) VALUES ( ... );

然后插入反馈。

INSERT INTO feedback (customerID, ... ) VALUES (LAST_INSERT_ID(), ... );

但是,对于MySQL,如果您的客户已经存在于数据库中,您可以使用非标准ON DUPLICATE KEY UPDATE技巧:

INSERT INTO customers ( ... ) VALUES ( ... )
ON DUPLICATE KEY UPDATE customerID = LAST_INSERT_ID(customerID)

如果客户已经存在,这将有效地将LAST_INSERT_ID()的结果分配给指定的客户ID,如http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html(在页面底部) - 如果客户没有如果存在,您将获得新创建的客户的自动递增主ID,如您所愿。

然后,INSERT INTO feedback查询应与LAST_INSERT_ID()一起使用,无论客户是创建还是更新 - 或者您可以在应用程序级别使用PDO::lastinsertid {{ 3}}

答案 1 :(得分:0)

customer表中插入尚未feedbacks的ID。

INSERT
  INTO feedbacks ( customerID )
SELECT c.customerID
  FROM customers c
 WHERE c.customerID NOT IN (
           SELECT f.customerID
             FROM feedbacks
       )
     ;