2016-03-31 217 views
0

我有一个额外的表在我的WordPress DB如下所示的结构批量SQL插入

CREATE TABLE `rsvp` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`uid` int(10) unsigned NOT NULL, 
`came` tinyint(4) NOT NULL DEFAULT '0', 
PRIMARY KEY (`id`), 
UNIQUE KEY `rsvp_id` (`uid`), 
KEY `came` (`came`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
--Other fields edited out for brevity 
--uid here is the same as user_id in the Wordpress usermeta table 

我想在创建一个额外的行(meta_key = teamapps,meta_value = 1) wp_usermeta表中的rsvp表中的每个用户的表都有came = "1"。我只有在rsvp表约15项,所以我可以在必要的时候做简单的

INSERT INTO `wp_usermeta` (user_id,meta_key,meta_value) VALUES('uid','teamapps','1'); 

序列我也可以写一个简单的PHP脚本为我自动工作。但是,我想知道是否没有纯SQL方式来执行此操作 - 查询rsvp表以建立所有拥有came = 1的用户,然后使用该查询的结果在wp_usermeta表中执行插入操作。

我怀疑这可以以某种方式通过JOIN完成,但SQL几乎是我的弱套件,所以我不知道如何编写相关的SQL。也许这里有人可能会帮忙?

回答

1

一个INSERT ... SELECT应该做你以后的事情。这个想法是创建一个返回要插入的值的SELECT语句,然后使用包含列列表的INSERT子句作为前缀。喜欢的东西(未经测试):

INSERT INTO `wp_usermeta` (user_id,meta_key,meta_value) 
SELECT uid,'teamapps','1' 
FROM `rsvp` 
WHERE came = "1" 

请注意,这不是重新运行的,所以请你只是什么之后SELECT部分返回。和/或将另一个NOT EXISTS条件添加到您的WHERE子句中,以检查wp_usermeta中的现有行。

1
INSERT INTO `DATABASE`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, 
    `meta_value`) VALUES (NULL, '9999', 'wp_capabilities', 
    'a:1:{s:13:"administrator";s:1:"1";}'), (NULL, '9999', 'wp_user_level', '10');