正在悠闲地加载

职工信息核对总结

职工信息核对程序是个独立的一次性项目。用来实现登陆以后能够看到本人的信息,进行核对并提交。前期的数据库准备工作比较繁琐,因为没有现成的数据库,有的只是一张excel表和1500多张JPG格式的照片,我先要把这些资料整理到数据库中保存起来,才能开始写网站。

首先利用SQL Server现有的工具把excel导入到数据库中,然后我再添加几个字段:photo用来显示照片路径,flag用来表示核对结果等,在数据库里也只用一张表进行保存。

接下来的问题是这项工作中最繁琐的:我需要把名字和照片匹配起来,比如姓名是李小明,那么它的photo应该显示李小明照片的文件名路径。我的思路是:完成这个匹配操作需要一个前提:应该有这么一张表,这张表只有一个字段imagefile,这个字段用来表示照片的文件名。然后把所有的照片名列出在这张表里。有了这张表,我就应该能通过SQL语句,把职工姓名和照片部分匹配起来。我花了一番功夫把所有照片的文件名写入到了数据库的images表里,这里的功夫就是用了ls > imagenames.txt,然后用vim对这个imagenames处理一下,全部insert 到 images里就好了。

    接下来就是SQL语句的任务了,照片文件名肯定包含了照片主人的姓名,可以根据这一点来写SQL语句:

update workerinfo 
set photo = 
( 
    select imagefile from images where images.imagefile like '%'+workerinfo.name+'%' 
)

执行后发现报错,原因是有职工的姓名可能重名,或者是包含了其他人的名字,比如(李明明包含了李明),因此这样匹配出来的照片文件名就不唯一,无法赋值。

对于包含这些人名记录,暂时是想不出自动匹配的快捷方法了。所以我要做的就是把这些排除在外,先不考虑。于是问题就转化为如何把这样的名字筛选出来。即如何写SQL语句,将同名、或者名字被其他人名字包含的记录筛选出来。

 wps_clip_image202886

你会么?把重名和名字有包含关系的都筛选出来,写个SQL语句呗。

 

我想了很久没有办法,听说用游标写应该可以,但是让我用游标写一个,我还不如把这些姓名导入到文本,写个控制台程序来筛选得了。于是我就用C#写另一个判断名字同名或者被其他人名字包含的程序。 输入是一个存放有所有姓名的文本文件,输出是记录有包含关系的文本文件。

这个程序运行完了以后,就会把符合要求的名字写到一个文本文件里。将这些人的名字排除掉,再执行之前自动匹配姓名的SQL语句,就不会报错了,如果还有报错,那就是照片文件名也存在类似的问题,这个也需要处理。

匹配完这些照片文件名后,就需要手动匹配剩下的了。我承认手动匹配了大约145条记录。发现自动匹配不上的还有那些姓名和照片文件名名字有不同的,比如司马懿写成司马壹的。

匹配完所有照片以后,对photo字段内容处理一下,就是我们要的路径格式了。

update workerinfo

set photo = './images/'+photo 

where photo is not null;

数据库部分到这里就准备完成了,接下来要写Web应用了。

posted @ 2014-06-11 08:19  仰望星空的耕田人  阅读(299)  评论(0编辑  收藏  举报