2011-10-25 6 views
0

다른 테이블에 MySQL의 열에서 CSV 값을 삽입해야합니다내가 포함 된 사용자 정보를 CSV 파일이

'Arlington', '1,3,5,7,9' 
'StackExchange', '2,3' 

그리고이 같은 수입 위의 정보가 필요합니다

"사용자"테이블 :

id | name 
1 | 'Arlington' 
2 | 'StackExchange' 

"사용자 그룹"테이블 :

id | user_id | group_id 
1 | 1  | 1 
2 | 1  | 3 
3 | 1  | 5 
4 | 1  | 7 
5 | 1  | 9 
6 | 2  | 2 
7 | 2  | 3 

가장 쉬운 방법은 무엇입니까? 내가, 내가 ID가 사용자 (사용자 테이블의 id 컬럼에 할당됩니다 정확히 알이 방법을 가져 오면 내가 생각하고

id | name   | tmp_group_ids 
1 | 'Arlington'  | '1,3,5,7,9' 
2 | 'StackExchange' | '2,3' 

: 나는 임시 열이 CSV 값을 들고 데이터를 가져온 auto_increment), 그래서 "사용자 그룹"테이블에 대해이 ID를 user_id로 사용할 수 있습니다.

하지만 이제 tmp_group_ids의 값을 '사용자 그룹'테이블에 어떻게 가져 옵니까?

도움을 주시면 감사하겠습니다. 감사!

답변

1

쉬운 방법은 PHP 또는 펄 스크립트입니다.

0

MySQL SUBSTRING() 함수를 사용하여 문자열을 분할하고 다른 값을 테이블에 삽입 할 수 있습니다. 함수를 작성하거나 저장 프로 시저를 사용하여이 작업을 수행 할 수 있습니다.

+0

을, 적어도. 이 점을 감안할 때 가장 간단한 해결책이 될 것입니다. –

0

은 내가 User로 구분 기호로 ","내가 사용, (캐릭터, DELIM는 계산) 기능 SUBSTRING_INDEX를 사용, 최근

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index

INSERT INTO tableUserGroup (userid, groupid) 
SELECT 
    t1.id 
    , substring_index(t1.tmp_group_ids,',',2) 
    , substring_index(t1.tmp_group_ids,',',3) 
FROM table1 t1 
+0

SE에서 비슷한 질문을 찾았습니다. [link] (http://stackoverflow.com/questions/7647499/mysql-extract-data-from-csv-string-and-insert-into-a-second-table) 그래서 내가 CSV 열에서 N 값이 가장 빠르고 더러운 것으로 알 수 있다면 이것을 N 번 호출 할 수 있을까요? 'INSERT INTO user_group (user_id, group_id) SELECT id, substring_index (tmp_group_ids, ',', [N]) FROM users' – Arlington

0

첫째, 삽입 이름을 비슷한 문제가 있었다 테이블 - id 일련 번호와 함께이 작동합니다 : 다음

INSERT INTO User 
    (name) 
SELECT DISTINCT 
    name 
FROM TempTable 

:

--- Create a "numbers" table: 
CREATE TABLE num 
(i INT PRIMARY KEY 
) ; 

--- Populate it with numbers: 
INSERT INTO num 
    (i) 
VALUES 
    (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); 

그런 다음 이런 (분할 필드를 쉼표로 구분)이 상황에 편리 FIND_IN_SET() 기능을 사용할 수 있습니다 : 탈출하는 CSV 필드에는 문자가없는 경우

INSERT INTO User_Groups 
    (user_id, group_id) 
SELECT 
    u.id AS user_id 
    , num.i AS group_id 
FROM User AS u 
    JOIN TempTable AS t 
    ON t.name = u.name 
    JOIN num 
    ON FIND_IN_SET(num.i, t.tmp_group_ids) > 0 
관련 문제