我試圖正常化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