我有一个包含用户信息的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
最简单的方法是什么?我已使用包含CSV值的临时列导入数据:
id | name | tmp_group_ids
1 | 'Arlington' | '1,3,5,7,9'
2 | 'StackExchange' | '2,3'
我在想如果我以这种方式导入它,我将确切地知道为用户分配了什么id(users表中的id列是auto_increment),因此我可以将该id用作user_id用于“用户组” “表。
但是现在我如何从tmp_group_ids获取“用户组”表中的值?
非常感谢任何帮助!谢谢!
答案 0 :(得分:1)
简单的方法是php或perl脚本。
答案 1 :(得分:0)
您可以使用MySQL SUBSTRING()
函数拆分字符串并将不同的值插入表中。您可以通过编写函数或使用存储过程来完成此操作。
答案 2 :(得分:0)
我最近遇到过类似的问题,我使用函数SUBSTRING_INDEX(str,delim,count),使用“,”作为分隔符
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
答案 3 :(得分:0)
首先,将名称插入User
表 - 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()
函数,这对于这种情况很方便(拆分以逗号分隔的字段),如下所示:
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