我试图正常化MySQL数据库....归一表,从一个到另一个
我现在有一个包含11列“类别”的表。第一列是user_id,另外10列是category_id_1 - category_id_10。有些行可能只包含category_id,最多为category_id_1,其余行可能为NULL。
然后我有了2列,USER_ID和CATEGORY_ID表...
什么是将所有的数据到表2分别排不增加一排是空列的最佳方式在表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中?
谢谢!用户
您可以创建一个查询来完成所有的工作,它只是需要复制和粘贴,并调整列名位:
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倍,并且可以丢码远,当你完成后,我会认为这是最简单的方法。
一个表:
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
为什么它必须是最好的方法?难道它不是最快最简单的方法吗?这不只是你会做一次的事吗? – 2010-03-01 23:10:45
Best =最快最容易! – mike 2010-03-01 23:20:01