2010-03-01 62 views
1

我试图正常化MySQL数据库....归一表,从一个到另一个

我现在有一个包含11列“类别”的表。第一列是user_id,另外10列是category_id_1 - category_id_10。有些行可能只包含category_id,最多为category_id_1,其余行可能为NULL。

然后我有了2列,USER_ID和CATEGORY_ID表...

什么是将所有的数据到表2分别排不增加一排是空列的最佳方式在表1中?

谢谢!用户

+0

为什么它必须是最好的方法?难道它不是最快最简单的方法吗?这不只是你会做一次的事吗? – 2010-03-01 23:10:45

+0

Best =最快最容易! – mike 2010-03-01 23:20:01

回答

1

您可以创建一个查询来完成所有的工作,它只是需要复制和粘贴,并调整列名位:

INSERT INTO table2 
SELECT * FROM (
    SELECT user_id, category_id_1 AS category_id FROM table1 
    UNION ALL 
    SELECT user_id, category_id_2 FROM table1 
    UNION ALL 
    SELECT user_id, category_id_3 FROM table1 
) AS T 
WHERE category_id IS NOT NULL; 

既然你只有做到这一点的10倍,并且可以丢码远,当你完成后,我会认为这是最简单的方法。

0

一个表:

users(id, name, username, etc) 

一个用于类别:

categories(id, category_name) 

一个链接两个,包括你可能想对参加任何额外的信息。

categories_users(user_id, category_id) 

-- or with extra information -- 

categories_users(user_id, category_id, date_created, notes) 

要将数据传输到链接表将会是编写一系列SQL INSERT语句的一种情况。有可能是一些真棒方式做到这一点一气呵成,但由于只有11个类别,只需复制和粘贴IMO:

INSERT INTO categories_users 
SELECT user_id, 1 
FROM old_categories 
WHERE category_1 IS NOT NULL