2016-03-31 262 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');