2012-01-07 78 views
0

我需要插入多行,但有些数据必须来自内部的选择 我有问题,构建例如正确的SQL语句我有:SQL插入多行与内选择

insert into game_friends(
game_users_id, 
game_users_id_name, 
created_to_app_users_id, 
created_to_app_users_id_name 
) VALUES ...... 

现在有问题的部分是,created_to_app_users_id_name和game_users_id_name我可以通过选择这样才得到:

SELECT app_users_game_users_id_name 
FROM `app_users` WHERE app_users_game_users_id = $game_users_id 

SELECT app_users_created_to_app_users_id_name 
FROM `app_users` 
WHERE app_users_created_to_app_users_id = $created_to_app_users_id 

我怎样才能用mysql它结合到一个SQL语句

UPDATE:
感谢所有回答,但我猜didnt解释我的问题吧...
我需要插入多行这意味着我将有一个像5-7 game_users_id未来 和它到底需要看起来像(用了选择这里。)

insert into game_friends(
    game_users_id, 
    game_users_id_name, 
    created_to_app_users_id, 
    created_to_app_users_id_name 
    ) 
VALUES 
    ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name), 
    ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name), 
    ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name), 
    ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name); 

其中每个值项需要从选择素组成吨。

回答

0

试试这个代码PHP:

$query = "insert into game_friends(
game_users_id, 
game_users_id_name, 
created_to_app_users_id, 
created_to_app_users_id_name 
) SELECT 
app_users_game_users_id, 
app_users_game_users_id_name, 
app_users_created_to_app_users_id, 
app_users_created_to_app_users_id_name 
FROM `app_users` WHERE 
app_users_game_users_id = $game_users_id 
AND 
app_users_created_to_app_users_id = $created_to_app_users_id"; 
+0

如果$ game_users_id和/或$ created_to_app_users_id可以由用户以任何方式控制,留下一些漂亮的SQL注入漏洞。用户尽可能准备语句以防止SQL注入。 – 2012-07-06 08:48:20

+0

@JamesOltmans感谢观察它实际上是一个变量,所以我试图使用他从问题中提到的变量,所以我想变量已经以某种方式清除了所有可能触发该问题的可能字符,并且我试图使事情很简单,直接回答用户从询问中询问的内容,但我知道这很容易出现SQL注入,但我认为与此相关的人员已经知道这一点。 ;) – 2012-07-07 14:51:30

0

这是UNTESTED

insert into game_friends 
(
    game_users_id, 
    game_users_id_name, 
    created_to_app_users_id, 
    created_to_app_users_id_name 
) 
VALUES 
SELECT game_users_id, 
     created_to_app_users_id, 
     FinalTable.game_users_id_name, 
     FinalTable.created_to_app_users_id_name 
FROM 
    ((SELECT app_users_game_users_id as game_users_id, 
      app_users_game_users_id_name as game_users_id_name 
    FROM app_users 
    WHERE app_users_game_users_id = game_users_id) as iGameID 
     INNER JOIN 
    (SELECT app_users_created_to_app_users_id as created_to_app_users_id, 
      app_users_created_to_app_users_id_name as created_to_app_users_id_name 
    FROM app_users 
    WHERE app_users_created_to_app_users_id = created_to_app_users_id) as iCreatedID 
     ON iGameID.game_users_id = iCreatedID.created_to_app_users_id) as FinalTable 
0

简单SELECT了两桌,没有任何JOINs应该做的伎俩(假设每个SELECT语句只返回一行):

INSERT INTO game_friends (
    game_users_id, 
    game_users_id_name, 
    created_to_app_users_id, 
    created_to_app_users_id_name 
) 

SELECT u_game.app_users_game_users_id, 
     u_game.app_users_game_users_id_name, 
     u_created.app_users_created_to_app_users_id, 
     u_created.app_users_created_to_app_users_id_name 
FROM `app_users` u_game, 
     `app_users` u_created 
WHERE u_game.app_users_game_users_id = $game_users_id 
    AND u_created.app_users_created_to_app_users_id = $created_to_app_users_id 

另注:我猜你app_users表确实有一列app_users_game_users_idapp_users_created_to_app_users_id。在这种情况下,您应该将SQL中的那些替换为真实的列名,我想这也是user_idapp_user_idid。只是你的模型看起来很奇怪,否则假设上面提到的两列在表中应该是唯一的。

+0

还要注意,你不需要'SQL'语句中的'VALUES':它既可以是'VALUES'也可以是'SELECT' – van 2012-01-07 09:13:21