很多時候,我們需要把客戶的產品添加到數據庫,一般來說客戶給的都是Excel這種表格數據,而我們平常程序中用的是mysql或者sql server,這樣就需要數據導入,對於數據量小的當然可以手動添加,如果數據量過萬甚至幾十萬,那么手動簡直就是不可能完成的,這個時候我們就需要寫一些輔助程序,這些程序不是給客戶用,而是用來導入數據的工具一樣.那么我們來結合實際例子來說說怎么開發這樣的代碼段.
拿到數據,首先就是數據分析,找出數據之間的關系,一般只有一兩個表那就容易,多則三個以上就要用草圖標記之間關系.
這是一個簡圖,隨便畫的,太難看了,我們需要給所有的屬性表里面產品添加屬性,產品表和屬性表關聯id就是產品id,屬性表存儲屬性分類id和屬性值id,屬性分類里面存儲了顏色,大小,重量,屬性值就是顏色大小重量的取值,等字段.我們要做的就是往屬性表添加下面的屬性,也就是插入顏色id,大小id,重量id,以及各自對應值得id,通過一條sql我們發現沒有辦法插入,因為我們需要查詢數據,把查詢的結果作為數據插入,這時候就需要分條插入,顏色,大小,重量三條數據插入,這時候數據變量就只有對應的值,他們的分類只有一個,通過php循環sql插入語句即可,這里用3個循環就可以插入,再插入之前,還需要先把產品id查詢出來,做一個循環,在里面插入這三條語句,也就是這里是雙重循環,一個大循環里面有6個小循環,三個查詢,三個插入,等我們寫完后就可以自動插入屬性,運行不過幾秒就完成了,如果手動的話,那工作量不敢想象,.具體代碼就不貼了,項目中用的,就一次導入就不用了.
想說的是sql里面有什么通過values((1,1,),(1,2),(1,3))也可以插入數據,但是要轉換格式也是頭痛的事情!ok,回家了
看了大家說的,特別研究了下其他用法:一並記錄到這里!
INSERT INTO table1 VALUES(null,'admin','admin',null,23,'留言');#插入所有列數據 INSERT INTO table1(id,age,content) VALUES(null,23,'留言'); #按照字段插入,沒有的就是null INSERT INTO table2(t1id,user,pass) SELECT id,username,password FROM table1;#查詢表1數據插入表2,查詢字段可添加常量,數據類型會自動轉化,后邊也支持WHERE條件. SELECT id,username,password,sex,age,content INTO table3 FROM table1;#查詢表1數據創建新表2,Mysql不支持下面是等價語句 CREATE TABLE table3 SELECT * FROM table1;#查詢數據1創建表3,表3需要不存在 DROP TABLE IF EXISTS table3;#刪除表3不存在就退出 alter TABLE table3 ADD PRIMARY key(id);#添加主鍵 alter table table3 add index (id,sex);#添加索引 ALTER TABLE table3 CHANGE id id INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT;#添加屬性或修改屬性,修改字段,第二個id不同的話就是更改字段名稱 SELECT * INTO OUTFILE 'E:\\1.txt' FROM table1;#導出數據到E盤 支持xls UPDATE table1 SET username='logove@qq.com' WHERE id=2;#修改第二條數據的用戶名字段值 UPDATE table1 LEFT JOIN table2 ON table1.id=table2.id SET username='logove@qq.com',user='qq.com' WHERE password='admin';#同時更新兩張表,支持inner join...on UPDATE table1 set username = REPLACE(username,'admin','admin1');#將表里面字段的值替換admin改成admin1 UPDATE table1 INNER JOIN table3 ON table1.id=table3.id SET table1.username=table3.content;#將后一個表的內容更新到前面表,可以跟where條件.可以使用其他表鏈接 DELETE FROM table1 WHERE id=1;#刪除id=3的記錄 DELETE table1,table2 FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE table1.id=4;#刪除兩個表里id=4的記錄 DELETE FROM table2 where id in(SELECT id from table1);#刪除表2在表1中所有記錄字段的結果.
看來insert into...select語句第一次用到!