在我的MySQL数据库中,我有两个表:customers
和feedbacks
值来自一个小的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 ;
问候
答案 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
)
;