2012-01-07 4 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 

как я могу объединить его в один SQL заявление, используя MySQL

UPDATE:
Спасибо всем за ответы, но я предполагаю, что техника его подводит объяснить мою проблему правильно ...
мне нужно вставить несколько строк это означает, что у меня будет как 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); 

где нужна каждая записи значения будет состоять из SELEC т.

ответ

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

Удаляет некоторые интересные инъекции SQL, если $ game_users_id и/или $ created_to_app_users_id могут управляться пользователем каким-либо образом. Подготовленные пользователем инструкции, когда это возможно, для предотвращения внедрения SQL. –

+0

@JamesOltmans Спасибо за наблюдение, это на самом деле переменная, поэтому я попытался использовать переменную, о которой он упомянул в вопросе, поэтому я полагаю, что переменные уже были очищены, как бы удалить все эти возможные символы, которые могут вызвать проблему, и я просто попытался сделать вещи просто ответить прямо на то, что пользователь запрашивает у своего запроса, но я знаю, что это подвержено SQL-инъекции, но я думаю, что этот человек уже знал об этом. ;) –

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 должны сделать трюк (предполагается, что каждый оператор выбора возвращает только одну строку):

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_id или app_users_created_to_app_users_id. В этом случае вы должны заменить те, что в SQL, на имя реального столбца, которое, я думаю, либо user_id, app_user_id, либо id. Просто ваша модель выглядит очень странно, иначе предполагается, что оба вышеупомянутых столбца должны быть уникальными в таблице.

+0

Также обратите внимание, что вам не нужны 'VALUES' в' 'SQL'': это либо' VALUES', либо 'SELECT' – van

Смежные вопросы