2010-03-01 89 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