2011-02-08 66 views
4

我在我的MySQL數據庫中有三個表。第一個是城市,第二個是城鎮,第三個是地區。每個城鎮都有很多地區。我的表詳細信息:將Excel數據導入到MySQL中的關係表中

城市:

cityid,城市名稱

鎮:

townid,cityid,townname,大陸

區:

districtid,townid,districtname

我有一個持有一個城市的城鎮和地區名稱的Excel文件。它有三列。

市,町名,地區名

城市的名字總是在這個excel表相同。鎮名因其區而重複。我的意思是對於一個城鎮的每個地區:城市名稱和城鎮名稱相同,地區名稱與往常不同。例如:

市,町名,地區名

X Y A

X Y B

X K C的

值X k d

+0

如果您在Excel中工作,ADO如何? – Fionnuala 2011-02-08 13:32:55

回答

3

粗略使用MySQL與Excel和ADO的例子。合適的連接字符串可以從http://connectionstrings.com

Dim cn As New ADODB.Connection 
Dim sFile As String, scn As String, sSQL As String 
Dim MySQLConnectionString As String 

''It is probably better to use the name of the workbook 
''eg C:\Docs\Cities.xls 
sFile = ActiveWorkbook.FullName 

''Access 2003 or less 
scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFile _ 
    & ";Extended Properties=""Excel 8.0;HDR=Yes"";" 
cn.Open scn 

MySQLConnectionString = "ODBC;Driver={MySQL ODBC 5.1 Driver};Server=localhost;" _ 
& "Database=mydatabase;User=myuser;Password=mypass;Option=3;" 

''Fields (columns) are case sensitive 
''Insert cities from sheet1, you can also use a named range, 
''include or a range 
sSQL = "INSERT INTO [" & MySQLConnectionString & "].Cities (Id,City) " _ 
& "SELECT Id,City FROM [Sheet$] WHERE Id Not In " _ 
& "(SELECT Id FROM [" & MySQLConnectionString & "].Cities)" 

cn.Execute sSQL, dbFailOnError 
8

可以得到你可以save your Excel sheet as in a CSV file,然後在臨時MySQL表使用LOAD DATA INFILE命令導入這樣的文件,Excel工作表的相同列,終於在拆分臨時表中的記錄三個表格「城市」,「城鎮」和「區域」。
前提:由於Excel文件中沒有「id」字段,因此我想所有的id都是「auto_increment」字段;此外,「城鎮」表中的「大陸」字段將始終設置爲空白值,因爲此字段不存在於Excel工作表中;最後,我假定所有「名稱」字段的最大長度爲255個字符。
從樣本數據出發,通過CSV格式導出Excel工作表和保存(例如)進入「C:\ TEMP \ excel.csv」的文件,你應該得到這樣的事情:

"city name","town name","district name" 
"X","Y","A" 
"X","Y","B" 
"X","K","C" 
"X","K","D" 

要將此文件導入到MySQL數據庫中,請創建一個「excel2mysql。SQL「有以下內容的文件,並execute it

DROP TABLE IF EXISTS excel_table; 
CREATE temporary TABLE excel_table (
    city_name VARCHAR(255), 
    town_name VARCHAR(255), 
    district_name VARCHAR(255) 
) DEFAULT CHARSET utf8; 

LOAD DATA LOCAL INFILE 'C:/Temp/excel.csv' 
INTO TABLE excel_table 
CHARACTER SET utf8 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES; 

DROP TABLE IF EXISTS cities; 
CREATE TABLE cities (
    city_id int NOT NULL auto_increment, 
    city_name VARCHAR(255), 
    primary key (city_id) 
) DEFAULT CHARSET utf8; 

INSERT INTO cities 
    SELECT distinctrow NULL, city_name 
    FROM excel_table 
    ORDER BY city_name; 

DROP TABLE IF EXISTS towns; 
CREATE TABLE towns (
    town_id int NOT NULL auto_increment, 
    city_id int NOT NULL, 
    town_name VARCHAR(255), 
    continent VARCHAR(255), 
    primary key (town_id) 
) DEFAULT CHARSET utf8; 

INSERT INTO towns 
    SELECT distinctrow NULL, city_id, town_name, '' 
    FROM excel_table, cities 
    WHERE cities.city_name=excel_table.city_name 
    ORDER BY town_name; 

DROP TABLE IF EXISTS districts; 
CREATE TABLE districts (
    district_id int NOT NULL auto_increment, 
    town_id int NOT NULL, 
    district_name VARCHAR(255), 
    primary key (district_id) 
) DEFAULT CHARSET utf8; 

INSERT INTO districts 
    SELECT distinctrow NULL, town_id, district_name 
    FROM excel_table, towns 
    WHERE towns.town_name=excel_table.town_name 
    ORDER BY district_name; 
0

如果您區,鎮名稱不以純ASCII(已重音字符),那麼你可能要做出一個或者調整爲@Enzino解決方案;可能只是向任何用戶指令添加腳註,以指示用戶在將表單保存爲CSV文件時,需要在另存爲對話框框中選擇:工具 - > Web選項選項,選擇編碼選項卡,在出現的對話框中設置字符集以匹配對應的mySQL表的字符集:保存前的Unicode(UTF-8)

或者,根據誰在哪裏輸入,我的以下answer可能會幫助他們將數據直接輸入到excel_table

相關問題