一: 要求:
上面的图表 中的数据插入到 3张表中.
1)t_vide_warehourse 分类表:
此表中包含 一级分类 和二级分类. 二级分类是一级分类的子级.
2)t_video_info 包名表
此表 管理 第一张表. 并且 只有 第二次分类 才可以有 包 名 .
一个二级分类下 可以 有多个包.
3)t_video_file 文件表.
此表 关联 第二张表; 一个 包 下 可以 有多个文件.
-----------------------------------------------------------------------------------------------
情况1:
上面: 第二级分类 就是 [教育培训], 包名 是 [计算机培训], 文件名是 [Android开发初级课程SQLite数据库介绍]
情况2:
上面: 二级分类 名 是 [其他], 包名是 [Photoshop CS6一对一教程], 文件名是 [01-01 Photoshopcs6安装方法]
情况3:
这种分类是空白的 数据 ,就排除掉. 不插入到数据库.
二: 导入到数据库的主题文件.
因为一个excel文件包含了 17个sheet ,太大了. 所以我们一个一个sheet的导入.
----------------
目录结构:
----------------------------------
1. file01.php
1 <?php 2 // ini_set (‘memory_limit‘, ‘-1‘); 3 /***************读取excel文件**************/ 4 require_once ‘PHPExcel_1.8.0/Classes/PHPExcel/IOFactory.php‘; 5 6 // echo "停止运行!"; 7 // die; 8 9 10 $execlName = ‘01.xlsx‘; 11 $firstCateName = "计算机"; 12 13 // $execlName = ‘02.xlsx‘; 14 // $firstCateName = "金融、会计"; 15 16 // $execlName = ‘03.xlsx‘; 17 // $firstCateName = "就业创业"; 18 19 // $execlName = ‘04.xlsx‘; 20 // $firstCateName = "学前教育"; 21 22 // $execlName = ‘05.xlsx‘; 23 // $firstCateName = "烹饪"; 24 25 // $execlName = ‘06.xlsx‘; 26 // $firstCateName = "电子商务"; 27 28 // $execlName = ‘07.xlsx‘; 29 // $firstCateName = "党政“两学一做”"; 30 31 // $execlName = ‘08.xlsx‘; 32 // $firstCateName = "美术"; 33 34 // $execlName = ‘09.xlsx‘; 35 // $firstCateName = "体育锻炼"; 36 37 // $execlName = ‘10.xlsx‘; 38 // $firstCateName = "英语学习"; 39 40 // $execlName = ‘11.xlsx‘; 41 // $firstCateName = "物联网"; 42 43 // $execlName = ‘12.xlsx‘; 44 // $firstCateName = "个人提升"; 45 46 // $execlName = ‘13.xlsx‘; 47 // $firstCateName = "国学"; 48 49 // $execlName = ‘14.xlsx‘; 50 // $firstCateName = "影视"; 51 52 // $execlName = ‘15.xlsx‘; 53 // $firstCateName = "音乐"; 54 55 // $execlName = ‘16.xlsx‘; 56 // $firstCateName = "艺术修养"; 57 58 // $execlName = ‘17.xlsx‘; 59 // $firstCateName = "养生"; 60 61 62 63 64 65 $reader = PHPExcel_IOFactory::createReader(‘Excel2007‘); //设置以Excel5格式(Excel97-2003工作簿) 66 $objPHPExcel = $reader->load($execlName); // 载入excel文件 67 $objWorksheet = $objPHPExcel->getSheet(0); // 读取第一個工作表 68 $highestRow = $objWorksheet->getHighestRow(); // 取得总行数 69 // $highestColumm = $objWorksheet->getHighestColumn(); // 取得总列数 70 71 $highestColumm = ‘K‘; // 取得总列数 72 73 74 // echo ‘总行数‘.$highestRow."总列数:".$highestColumm; 75 76 /************ 循环读取每个单元格的数据 *********************/ 77 78 79 //行数是以第2行开始: A2,B2,C2....----> A10,B10,C10...-----> 80 for ($row = 2; $row <= $highestRow; $row++) 81 { 82 for ($column = ‘A‘; $column <= $highestColumm; $column++) 83 {//列数是以A列开始 84 85 86 //取得一个单元格的值 87 $cell = $objWorksheet->getCell($column.$row)->getValue(); 88 //富文本对象 转为 字符串 89 if($cell instanceof PHPExcel_RichText) 90 { 91 $cell = $cell->__toString(); 92 } 93 94 95 //$oneData 是一条记录 96 $oneData[] = $cell; 97 98 } 99 100 //$data 是多条记录 101 $data[] = $oneData; 102 //清空原来的一条记录 103 unset($oneData); 104 } 105 106 //上面取出$data是初始数据,还需要进行处理 107 // 108 109 110 // 去除 没有 分类的数据 111 foreach ($data as $key => $value) 112 { 113 if(empty($value[2])) 114 { 115 unset($data[$key]); 116 } 117 } 118 119 // echo "<pre>"; 120 // print_r($data); 121 122 123 124 125 //1: 添加一级分类, 二级分类, 包名: 126 foreach ($data as $k => $v) 127 { 128 //一级分类: 129 $v[0] = $firstCateName; 130 131 $arr = explode(‘->‘, $v[2]); 132 133 if (count($arr) == 1) 134 { 135 //二级分类: 136 $v[1] = ‘其他‘; 137 138 //包名: 139 } 140 else 141 { 142 //二级分类: 143 $v[1] = $arr[1]; 144 145 //包名: 146 $v[2] = $arr[2]; 147 } 148 149 150 151 $data1[] = $v; 152 } 153 154 // echo "<pre>"; 155 // print_r($data); 156 // print_r($data1); 157 158 159 //2: 获取 一级分类id; 二级分类id, 包id; 如果没有, 就插入返回的id 160 include_once ‘test.php‘; 161 162 foreach ($data1 as $k => $v) 163 { 164 //1: 插入一级分类: 165 $firstCateName = $v[0]; 166 $firstCateId = insertFrist($firstCateName); 167 168 //2: 插入二级分类: 169 $secondCateName = $v[1]; 170 $secondCateId = insertSecond($secondCateName, $firstCateId); 171 172 //3: 插入info表: 包名: 173 $baoName = $v[2]; 174 $path = ‘/Course/CourseImage/‘.$v[5]; 175 $infoId = insertInfo($baoName, $path, $secondCateId); 176 177 //4: 插入文件: 178 $fileName = $v[3]; 179 $imagePath = ‘/Course/CourseImage/‘.$v[5]; 180 $keywords = $v[6]; 181 $fileType = substr($v[4],strrpos($v[4],‘.‘)+1); 182 $filePath = ‘/files/video/‘.$v[4]; 183 insertFile($infoId, $fileName, $imagePath, $keywords, $fileType, $filePath); 184 185 } 186 187 188 echo $firstCateName. ‘导入完毕!‘; 189 190 191 192 193 194 195 196 197 198 199 200 201 202 /*******************函数**********************/ 203 204 205 206 207 208 ?>
注意:
因为格式是 .xlsx 所以 这里是 Excel2007 , 不是 Excel5
2. test.php
插入数据库函数.
1 <?php 2 3 4 5 6 7 // var_dump(insertFrist(‘英语1‘)); 8 9 // var_dump(insertSecond(‘英语1-1‘, 153309)); 10 // var_dump(insertSecond(‘英语1-2‘, 153309)); 11 // var_dump(insertSecond(‘测试‘, 153309)); 12 13 // var_dump(insertFrist(‘英语2‘)); 14 // var_dump(insertSecond(‘测试‘, 153313)); 15 16 // var_dump(insertInfo(‘包3‘, ‘/coure/test/01.png‘,153314)); 17 // var_dump(insertInfo(‘包3‘, ‘/coure/test/01.png‘,153315)); 18 // 19 // var_dump(insertFile(111, ‘测试文件2‘, ‘/course/test/01.jpg‘, ‘haha, gest,test‘, ‘flv‘, ‘/course/video/01.flv‘)); 20 21 /*******************函数**********************/ 22 23 24 function insertFrist($firstCateName) 25 { 26 27 $firstCateName = trim($firstCateName); 28 29 $dbhost = ‘127.0.0.1‘; // mysql服务器主机地址 30 $dbuser = ‘root‘; // mysql用户名 31 $dbpass = ‘‘; // mysql用户名密码 32 $conn = mysql_connect($dbhost, $dbuser, $dbpass); 33 if(! $conn ) 34 { 35 die(‘Could not connect: ‘ . mysql_error()); 36 } 37 38 mysql_select_db(‘testvideo‘, $conn); 39 // 设置编码,防止中文乱码 40 mysql_query("set names utf8", $conn); 41 42 $sql = "SELECT * FROM t_vide_warehourse WHERE RW_NAME = ‘" .$firstCateName. "‘ AND RW_PARENT_ID = 0 "; 43 $result = mysql_query( $sql, $conn ); 44 if(! $result ) 45 { 46 die(‘Could not get data: ‘ . mysql_error()); 47 } 48 else 49 { 50 $num = mysql_num_rows($result); 51 52 if ($num == 0) 53 { 54 $sql = "INSERT INTO t_vide_warehourse (RW_NAME, RW_PARENT_ID) VALUES (‘" .$firstCateName. "‘, 0)"; 55 if (mysql_query($sql, $conn)) { 56 return mysql_insert_id(); 57 }else{ 58 echo "插入一级出错". mysql_error(); 59 } 60 } 61 else 62 { 63 while ($row = mysql_fetch_array($result) ) 64 { 65 return $row["VIDEO_RW_ID"]; 66 } 67 } 68 69 } 70 71 72 //查询 73 mysql_close($conn); 74 } 75 76 77 function insertSecond($secondCateName, $firstCateId) 78 { 79 80 $secondCateName = trim($secondCateName); 81 82 $dbhost = ‘127.0.0.1‘; // mysql服务器主机地址 83 $dbuser = ‘root‘; // mysql用户名 84 $dbpass = ‘‘; // mysql用户名密码 85 $conn = mysql_connect($dbhost, $dbuser, $dbpass); 86 if(! $conn ) 87 { 88 die(‘Could not connect: ‘ . mysql_error()); 89 } 90 91 mysql_select_db(‘testvideo‘, $conn); 92 // 设置编码,防止中文乱码 93 mysql_query("set names utf8", $conn); 94 95 $sql = "SELECT * FROM t_vide_warehourse WHERE RW_NAME = ‘" .$secondCateName. "‘ AND RW_PARENT_ID = $firstCateId "; 96 $result = mysql_query( $sql, $conn ); 97 if(! $result ) 98 { 99 die(‘Could not get data: ‘ . mysql_error()); 100 } 101 else 102 { 103 $num = mysql_num_rows($result); 104 105 if ($num == 0) 106 { 107 $sql = "INSERT INTO t_vide_warehourse (RW_NAME, RW_PARENT_ID) VALUES (‘" .$secondCateName. "‘, $firstCateId)"; 108 if (mysql_query($sql, $conn)) { 109 return mysql_insert_id(); 110 }else{ 111 echo "插入二级级出错". mysql_error(); 112 } 113 } 114 else 115 { 116 while ($row = mysql_fetch_array($result) ) 117 { 118 return $row["VIDEO_RW_ID"]; 119 } 120 } 121 122 } 123 124 125 //查询 126 mysql_close($conn); 127 } 128 129 function insertInfo($baoName, $path, $secondCateId) 130 { 131 132 $baoName = trim($baoName); 133 $path = trim($path); 134 135 $dbhost = ‘127.0.0.1‘; // mysql服务器主机地址 136 $dbuser = ‘root‘; // mysql用户名 137 $dbpass = ‘‘; // mysql用户名密码 138 $conn = mysql_connect($dbhost, $dbuser, $dbpass); 139 if(! $conn ) 140 { 141 die(‘Could not connect: ‘ . mysql_error()); 142 } 143 144 mysql_select_db(‘testvideo‘, $conn); 145 // 设置编码,防止中文乱码 146 mysql_query("set names utf8", $conn); 147 148 $sql = "SELECT * FROM t_video_info WHERE VIDEO_TITLE = ‘" .$baoName. "‘ AND RW_ID = $secondCateId "; 149 $result = mysql_query( $sql, $conn ); 150 if(! $result ) 151 { 152 die(‘Could not get data: ‘ . mysql_error()); 153 } 154 else 155 { 156 $num = mysql_num_rows($result); 157 158 if ($num == 0) 159 { 160 $sql = "INSERT INTO t_video_info (VIDEO_TITLE,PATH, RW_ID) VALUES (‘" .$baoName. "‘, ‘" .$path. "‘, $secondCateId)"; 161 if (mysql_query($sql, $conn)) { 162 return mysql_insert_id(); 163 }else{ 164 echo "插入info出错". mysql_error(); 165 } 166 } 167 else 168 { 169 while ($row = mysql_fetch_array($result) ) 170 { 171 return $row["VIDEO_ID"]; 172 } 173 } 174 175 } 176 177 178 //查询 179 mysql_close($conn); 180 } 181 182 function insertFile($infoId, $fileName, $imagePath, $keywords, $fileType, $filePath) 183 { 184 185 $fileName = trim($fileName); 186 $imagePath = trim($imagePath); 187 $keywords = trim($keywords); 188 $fileType = trim($fileType); 189 $filePath = trim($filePath); 190 191 $dbhost = ‘127.0.0.1‘; // mysql服务器主机地址 192 $dbuser = ‘root‘; // mysql用户名 193 $dbpass = ‘‘; // mysql用户名密码 194 $conn = mysql_connect($dbhost, $dbuser, $dbpass); 195 if(! $conn ) 196 { 197 die(‘Could not connect: ‘ . mysql_error()); 198 } 199 200 mysql_select_db(‘testvideo‘, $conn); 201 // 设置编码,防止中文乱码 202 mysql_query("set names utf8", $conn); 203 204 $sql = "INSERT INTO t_video_file (VIDEO_ID, FILE_NAME, IMAGEPATH, KEYWORDS, FILE_TYPE, FILE_PATH) VALUES ($infoId, ‘" .$fileName. "‘, ‘" .$imagePath. "‘, ‘" .$keywords. "‘, ‘" .$fileType. "‘, ‘" .$filePath. "‘)"; 205 206 // echo $sql; 207 208 if (mysql_query($sql, $conn)) { 209 return mysql_insert_id(); 210 }else{ 211 echo "插入文件出错". mysql_error(); 212 } 213 214 215 216 217 218 219 //查询 220 mysql_close($conn); 221 } 222 223 224 225 226 ?>
这里4个函数:
1) insertFrist 给 第一张表插入 第一级分类, 如果重复,返回已有id ; 不重复, 插入,返回新的id;
2)insertSecond 给第一张表 插入 二级分类, 如果重复, 返回已有id; 不重复, 插入,返回新的id;
3)insertInfo 给第二张表插入 数据, 如果重复, 返回已有id; 不重复, 插入,返回新的id;
4)insertFile 给第三张宝插入数据, 对于文件 ,不考虑文件名是否重复.