職工資訊核對總結

理工紫發表於2014-06-11

職工資訊核對程式是個獨立的一次性專案。用來實現登陸以後能夠看到本人的資訊,進行核對並提交。前期的資料庫準備工作比較繁瑣,因為沒有現成的資料庫,有的只是一張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應用了。

相關文章