MySQL:将多个表值插入一个

时间:2013-07-13 07:31:19

标签: php mysql insert

第一次来这里..以及PHP MySQL的新手。

我正在尝试将WordPress用户数据传输到另一个表以供某些自定义使用。这是我的表

我正在寻找的东西可以在rc_users(最终结果)表中找到,请看下面链接的图片,因为我是新来的,无法发布图片。

http://i.stack.imgur.com/F1yEc.jpg

不知何故,我设法从wp_users表插入值,但现在从wp_usermeta表中插入值时遇到麻烦。

此外,我想基于条件转换wp_user_level,以便用户的10级别转换为100等等。

这是我试过的

// inserting user auth info                  
"INSERT INTO rc_users
(userid, name, password, email, created) 
SELECT ID, user_login, user_pass, user_email, user_registered 
FROM wp_users",     

// inserting user level info         
"INSERT INTO rc_users
(role)
SELECT meta_value
FROM wp_usermeta
WHERE user_id = userid
AND meta_value = wp_user_level"

非常感谢你的帮助..

2 个答案:

答案 0 :(得分:0)

您需要将wp_user表与wp_usermeta联系起来才能获得meta_value。由于元组是按行而不是列保存的,因此您需要使用MAX()CASE()来转动结果。

INSERT INTO rc_users(userid, created, email, name, password, `role`)
SELECT  a.ID, a.user_registered, a.user_email, 
        a.user_login, a.user_pass, 
        MAX(CASE WHEN b.meta_key = 'wp_user_level' THEN meta_value END) role
FROM    wp_user a
        INNER JOIN wp_usermeta b
            ON a.ID = b.user_id
GROUP   BY  a.ID, a.user_registered, a.user_email, 
            a.user_login, a.user_pass

我不知道为什么角色的值在屏幕截图中是100而不是10。

INSERT INTO rc_users(userid, created, email, name, password, `role`)
SELECT  a.ID, a.user_registered, a.user_email, 
        a.user_login, a.user_pass, 
        CASE    MAX(CASE WHEN b.meta_key = 'wp_user_level' THEN meta_value END) 
                WHEN 10 THEN 100
                WHEN 8 THEN 75
                ELSE 0
        END role
FROM    wp_user a
        INNER JOIN wp_usermeta b
            ON a.ID = b.user_id
GROUP   BY  a.ID, a.user_registered, a.user_email, 
            a.user_login, a.user_pass

答案 1 :(得分:0)

您应该使用更新查询

,而不是使用第二个Insert查询

更新rc_users set role =(SELECT meta_value FROM wp_usermeta WHERE user_id = userid AND meta_value ='wp_user_level');