Mysql 如何规范具有逗号分隔值的列
我现在的桌子。仅显示其他字段的id和类型被删除Mysql 如何规范具有逗号分隔值的列,mysql,sql,Mysql,Sql,我现在的桌子。仅显示其他字段的id和类型被删除 +---------+----------------------+ | id | genre | +---------+----------------------+ | 1849012 | Animation, Short | | 2016229 | Comedy, Crime, Drama | | 224412 | Drama, Family
+---------+----------------------+
| id | genre |
+---------+----------------------+
| 1849012 | Animation, Short |
| 2016229 | Comedy, Crime, Drama |
| 224412 | Drama, Family |
+---------+----------------------+
我已经创建了Nessery表,如何填充它们?
创建了名为genre的表,其中包含“genreid”和“name”字段
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| genreid | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+.
我还创建了另一个名为movie2genre的表
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| movieid | int(11) | YES | | NULL | |
| genreid | int(11) | YES | | NULL | |
+---------+---------+------+-----+---------+-------+
可以将字符串拆分。生成覆盖最大字符串数的一系列数字。根据当前表交叉连接此项,并使用子字符串索引(子字符串索引(类型“,”,一些生成的子字符串编号),“,”,-1)。这将为您提供每个id的所有类型(尽管最后一个将被复制-使用DISTINCT将其删除)。这可用于填充流派表 在SQL中,这将是:-
INSERT INTO genre (genreid, name)
SELECT DISTINCT NULL, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(genre, ',', sub0.aCnt), ',', -1))
FROM current_table
CROSS JOIN
(
SELECT units.a + tens.a * 10 AS aCnt
FROM
(
SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) units
CROSS JOIN
(
SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) tens
) sub0
然后,您可以根据现有表(使用FIND_IN_SET)加入流派表,以填充movie2genre表
填充后,您可以使用一个简单的查询填充将电影链接到流派的表:-
INSERT INTO movie2genre
SELECT current_table.id, genre.id
FROM current_table
INNER JOIN genre
ON FIND_IN_SET(genre.name, REPLACE(current_table.genre, ', ', ','))
最好的办法可能是在进行翻译之前填充流派表。创建一个存储过程来“分解”
流派
,然后在流派
表中搜索id,如果id不存在,则插入一条记录,然后插入到movie2genre
是否可以使用某种外部语言?例如,将数据拉入PHP,解析流派,然后填充新表?@hogan,这是可能的。但是我如何填充原始表格中的movie2genre和update流派列链接问题是不同的。链接问题要求映射1行->1行,1列->3列;此问题要求映射1行->Nrows