一: 要求:

上面的图表 中的数据插入到 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

 <?php
// ini_set ('memory_limit', '-1');
/***************读取excel文件**************/
require_once 'PHPExcel_1.8.0/Classes/PHPExcel/IOFactory.php'; // echo "停止运行!";
// die; $execlName = '01.xlsx';
$firstCateName = "计算机"; // $execlName = '02.xlsx';
// $firstCateName = "金融、会计"; // $execlName = '03.xlsx';
// $firstCateName = "就业创业"; // $execlName = '04.xlsx';
// $firstCateName = "学前教育"; // $execlName = '05.xlsx';
// $firstCateName = "烹饪"; // $execlName = '06.xlsx';
// $firstCateName = "电子商务"; // $execlName = '07.xlsx';
// $firstCateName = "党政“两学一做”"; // $execlName = '08.xlsx';
// $firstCateName = "美术"; // $execlName = '09.xlsx';
// $firstCateName = "体育锻炼"; // $execlName = '10.xlsx';
// $firstCateName = "英语学习"; // $execlName = '11.xlsx';
// $firstCateName = "物联网"; // $execlName = '12.xlsx';
// $firstCateName = "个人提升"; // $execlName = '13.xlsx';
// $firstCateName = "国学"; // $execlName = '14.xlsx';
// $firstCateName = "影视"; // $execlName = '15.xlsx';
// $firstCateName = "音乐"; // $execlName = '16.xlsx';
// $firstCateName = "艺术修养"; // $execlName = '17.xlsx';
// $firstCateName = "养生"; $reader = PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel5格式(Excel97-2003工作簿)
$objPHPExcel = $reader->load($execlName); // 载入excel文件
$objWorksheet = $objPHPExcel->getSheet(0); // 读取第一個工作表
$highestRow = $objWorksheet->getHighestRow(); // 取得总行数
// $highestColumm = $objWorksheet->getHighestColumn(); // 取得总列数 $highestColumm = 'K'; // 取得总列数 // echo '总行数'.$highestRow."总列数:".$highestColumm; /************ 循环读取每个单元格的数据 *********************/ //行数是以第2行开始: A2,B2,C2....----> A10,B10,C10...----->
for ($row = 2; $row <= $highestRow; $row++)
{
for ($column = 'A'; $column <= $highestColumm; $column++)
{//列数是以A列开始 //取得一个单元格的值
$cell = $objWorksheet->getCell($column.$row)->getValue();
//富文本对象 转为 字符串
if($cell instanceof PHPExcel_RichText)
{
$cell = $cell->__toString();
} //$oneData 是一条记录
$oneData[] = $cell; } //$data 是多条记录
$data[] = $oneData;
//清空原来的一条记录
unset($oneData);
} //上面取出$data是初始数据,还需要进行处理
// // 去除 没有 分类的数据
foreach ($data as $key => $value)
{
if(empty($value[2]))
{
unset($data[$key]);
}
} // echo "<pre>";
// print_r($data); //1: 添加一级分类, 二级分类, 包名:
foreach ($data as $k => $v)
{
//一级分类:
$v[0] = $firstCateName; $arr = explode('->', $v[2]); if (count($arr) == 1)
{
//二级分类:
$v[1] = '其他'; //包名:
}
else
{
//二级分类:
$v[1] = $arr[1]; //包名:
$v[2] = $arr[2];
} $data1[] = $v;
} // echo "<pre>";
// print_r($data);
// print_r($data1); //2: 获取 一级分类id; 二级分类id, 包id; 如果没有, 就插入返回的id
include_once 'test.php'; foreach ($data1 as $k => $v)
{
//1: 插入一级分类:
$firstCateName = $v[0];
$firstCateId = insertFrist($firstCateName); //2: 插入二级分类:
$secondCateName = $v[1];
$secondCateId = insertSecond($secondCateName, $firstCateId); //3: 插入info表: 包名:
$baoName = $v[2];
$path = '/Course/CourseImage/'.$v[5];
$infoId = insertInfo($baoName, $path, $secondCateId); //4: 插入文件:
$fileName = $v[3];
$imagePath = '/Course/CourseImage/'.$v[5];
$keywords = $v[6];
$fileType = substr($v[4],strrpos($v[4],'.')+1);
$filePath = '/files/video/'.$v[4];
insertFile($infoId, $fileName, $imagePath, $keywords, $fileType, $filePath); } echo $firstCateName. '导入完毕!'; /*******************函数**********************/ ?>

注意:

因为格式是 .xlsx  所以 这里是 Excel2007 , 不是 Excel5

2. test.php

插入数据库函数.

 <?php

     // var_dump(insertFrist('英语1'));

     // var_dump(insertSecond('英语1-1', 153309));
// var_dump(insertSecond('英语1-2', 153309));
// var_dump(insertSecond('测试', 153309)); // var_dump(insertFrist('英语2'));
// var_dump(insertSecond('测试', 153313)); // var_dump(insertInfo('包3', '/coure/test/01.png',153314));
// var_dump(insertInfo('包3', '/coure/test/01.png',153315));
//
// var_dump(insertFile(111, '测试文件2', '/course/test/01.jpg', 'haha, gest,test', 'flv', '/course/video/01.flv')); /*******************函数**********************/ function insertFrist($firstCateName)
{ $firstCateName = trim($firstCateName); $dbhost = '127.0.0.1'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = ''; // mysql用户名密码
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
} mysql_select_db('testvideo', $conn);
// 设置编码,防止中文乱码
mysql_query("set names utf8", $conn); $sql = "SELECT * FROM t_vide_warehourse WHERE RW_NAME = '" .$firstCateName. "' AND RW_PARENT_ID = 0 ";
$result = mysql_query( $sql, $conn );
if(! $result )
{
die('Could not get data: ' . mysql_error());
}
else
{
$num = mysql_num_rows($result); if ($num == 0)
{
$sql = "INSERT INTO t_vide_warehourse (RW_NAME, RW_PARENT_ID) VALUES ('" .$firstCateName. "', 0)";
if (mysql_query($sql, $conn)) {
return mysql_insert_id();
}else{
echo "插入一级出错". mysql_error();
}
}
else
{
while ($row = mysql_fetch_array($result) )
{
return $row["VIDEO_RW_ID"];
}
} } //查询
mysql_close($conn);
} function insertSecond($secondCateName, $firstCateId)
{ $secondCateName = trim($secondCateName); $dbhost = '127.0.0.1'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = ''; // mysql用户名密码
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
} mysql_select_db('testvideo', $conn);
// 设置编码,防止中文乱码
mysql_query("set names utf8", $conn); $sql = "SELECT * FROM t_vide_warehourse WHERE RW_NAME = '" .$secondCateName. "' AND RW_PARENT_ID = $firstCateId ";
$result = mysql_query( $sql, $conn );
if(! $result )
{
die('Could not get data: ' . mysql_error());
}
else
{
$num = mysql_num_rows($result); if ($num == 0)
{
$sql = "INSERT INTO t_vide_warehourse (RW_NAME, RW_PARENT_ID) VALUES ('" .$secondCateName. "', $firstCateId)";
if (mysql_query($sql, $conn)) {
return mysql_insert_id();
}else{
echo "插入二级级出错". mysql_error();
}
}
else
{
while ($row = mysql_fetch_array($result) )
{
return $row["VIDEO_RW_ID"];
}
} } //查询
mysql_close($conn);
} function insertInfo($baoName, $path, $secondCateId)
{ $baoName = trim($baoName);
$path = trim($path); $dbhost = '127.0.0.1'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = ''; // mysql用户名密码
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
} mysql_select_db('testvideo', $conn);
// 设置编码,防止中文乱码
mysql_query("set names utf8", $conn); $sql = "SELECT * FROM t_video_info WHERE VIDEO_TITLE = '" .$baoName. "' AND RW_ID = $secondCateId ";
$result = mysql_query( $sql, $conn );
if(! $result )
{
die('Could not get data: ' . mysql_error());
}
else
{
$num = mysql_num_rows($result); if ($num == 0)
{
$sql = "INSERT INTO t_video_info (VIDEO_TITLE,PATH, RW_ID) VALUES ('" .$baoName. "', '" .$path. "', $secondCateId)";
if (mysql_query($sql, $conn)) {
return mysql_insert_id();
}else{
echo "插入info出错". mysql_error();
}
}
else
{
while ($row = mysql_fetch_array($result) )
{
return $row["VIDEO_ID"];
}
} } //查询
mysql_close($conn);
} function insertFile($infoId, $fileName, $imagePath, $keywords, $fileType, $filePath)
{ $fileName = trim($fileName);
$imagePath = trim($imagePath);
$keywords = trim($keywords);
$fileType = trim($fileType);
$filePath = trim($filePath); $dbhost = '127.0.0.1'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = ''; // mysql用户名密码
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
} mysql_select_db('testvideo', $conn);
// 设置编码,防止中文乱码
mysql_query("set names utf8", $conn); $sql = "INSERT INTO t_video_file (VIDEO_ID, FILE_NAME, IMAGEPATH, KEYWORDS, FILE_TYPE, FILE_PATH) VALUES ($infoId, '" .$fileName. "', '" .$imagePath. "', '" .$keywords. "', '" .$fileType. "', '" .$filePath. "')"; // echo $sql; if (mysql_query($sql, $conn)) {
return mysql_insert_id();
}else{
echo "插入文件出错". mysql_error();
} //查询
mysql_close($conn);
} ?>

这里4个函数:

1) insertFrist  给 第一张表插入 第一级分类, 如果重复,返回已有id ; 不重复, 插入,返回新的id;

2)insertSecond  给第一张表 插入 二级分类, 如果重复, 返回已有id; 不重复, 插入,返回新的id;

3)insertInfo 给第二张表插入 数据,   如果重复, 返回已有id; 不重复, 插入,返回新的id;

4)insertFile 给第三张宝插入数据,  对于文件 ,不考虑文件名是否重复.

PHPexcel 导入import 数据到 mysql: mysql 查询数据是否存在, 如果存在返回id, 不存在, 插入返回id. 2) mysql_query , mysql_connect, mysql_select_db, mysql_error, mysql_num_rows,mysql_close的更多相关文章

  1. 如何实现MySQL随机查询数据与MySQL随机更新数据?

    以下的文章主要介绍的是MySQL随机选取数据,对实现MySQ随机查询数据与MySQ随机更新数据的实际操作步骤的描述,以及对其实际操作中所要用到的语句的描述,以下就是对其具体操作步骤的描述. MySQL ...

  2. Python3操作MySQL,查询数据并保存到文件中

    我们在测试过程中,可能需要到数据库中拉去一些数据,为从测试准备.比如最近在做接口性能测试的时候,就需要很多数据来支撑,所以就需要的数据库去查询数据,下面就是python3 查询 mysql 并且保存到 ...

  3. 分享:mysql 随机查询数据

    在mysql中查询5条不重复的数据,使用以下: 1 SELECT * FROM `table` ORDER BY RAND() LIMIT 5  就可以了.但是真正测试一下才发现这样效率非常低.一个1 ...

  4. nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效

    最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...

  5. MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row_number变相实现方法)

    转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_numbe ...

  6. MySQL数据库——查询数据

    增加数据: insert into "表名" values( '字段'',字段'); 或insert into '表名'( '字段'',字段')  values( '字段'',字段 ...

  7. iOS开发之数据存取2-CoreData后台查询数据

    注意:本人所讲的后台查询必须在使用CoreData时选择存储类型为“SQLite”,因为二进制或者XML存储方式会在打开的时候直接读到内存中. 1.CoreData数据后台查询出现的情况 CoreDa ...

  8. Mysql数据库查询数据文件大小

    参考网站:https://zhidao.baidu.com/question/201227796936321525.html 用SQL命令查看Mysql数据库大小 要想知道每个数据库的大小的话,步骤如 ...

  9. 解决mysql控制台查询数据乱码的问题,有图有真相

    在mysql  控制台当 当为gbk的时候查询的数据是汉字,假设不是则为乱码.  set  names  gbk;  那么查询出来的数据则为汉字

随机推荐

  1. Elsevier系旗下期刊论文投稿流程

    目录 1.上传文件需求 2.注册账号和填写相关信息 3.以作者身份登入 4.开始提交论文:点击submit New Manuscript 5.选择论文类型:一般是科技长文Full Length Art ...

  2. 『Python × C++』函数传参机制学习以及对比

    一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...

  3. Codeforces Round #250 (Div. 1)E. The Child and Binary Tree

    题意:有一个集合,求有多少形态不同的二叉树满足每个点的权值都属于这个集合并且总点权等于i 题解:先用生成函数搞出来\(f(x)=f(x)^2*c(x)+1\) 然后转化一下变成\(f(x)=\frac ...

  4. poj-2142-exgcd/解的和最小

    The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8816   Accepted: 3833 Descr ...

  5. 类似“未能加载文件或程序集“tesseractengine3”或它的某一个依赖项”等一些问题的解决方案

    有些时候我们引用了一些32位的dll,结果就会出现类似“未能加载文件或程序集“tesseractengine3”或它的某一个依赖项”这样的问题,原因是IIS的应用程序池的设置中默认是不启用32位的应用 ...

  6. Github 指令上手 --- 分支

    指令环境 Git Shell 1.创建一个新分支 git branch branchName 2.切换到新创建的分支 git checkout branchName 1.2合起来使用指令(创建并切换) ...

  7. 二十五、过滤器Filter,监听器Listener,拦截器Interceptor的区别

    1.Servlet:运行在服务器上可以动态生成web页面.servlet的声明周期从被装入到web服务器内存,到服务器关闭结束.一般启动web服务器时会加载servelt的实例进行装入,然后初始化工作 ...

  8. 【转】JavaScript => TypeScript 入门

    几个月前把 ES6 的特性都过了一遍,收获颇丰.现在继续来看看 TypesScript(下文简称为 “TS”).限于经验,本文一些总结如有不当,欢迎指正. 官网有这样一段描述: TypeScript ...

  9. AIX安装JDK1.7教程

    1.下载 下载链接(下载需要登录IBM账号):https://www.ibm.com/developerworks/java/jdk/aix/service.html#i1 由于jdk版本AIX操作系 ...

  10. 随机数类Random

    我们来学习下,用来产生随机数的类Random,它也属于引用数据类型. 这个Random类,它可以产生多种数据类型的随机数,在这里我们主要介绍生成整数与小数的方式. l  方法简介 public int ...