我在數據庫中有一張表,用於存儲可從服務器上檢索圖像文件的名稱。刪除具有類似名稱的數據庫重複項
表說明如下:
+------------+-----------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------+------+-----+-------------------+-------+
| id | varchar(50) | NO | PRI | NULL | |
| userid | varchar(8) | NO | | NULL | |
| albumid | varchar(25) | NO | | NULL | |
| image_name | varchar(256) | NO | | NULL | |
| status | int(1) unsigned | NO | | NULL | |
| comments | varchar(4000) | YES | | NULL | |
| mod_date | timestamp | NO | | CURRENT_TIMESTAMP | |
+------------+-----------------+------+-----+-------------------+-------+
我有掃描新文件的圖像文件夾並將它們添加到數據庫中的一個單獨的PHP腳本。 但是,試圖更新數據庫的人員會刪除所有文件夾(針對每個用戶標識和albumid ...)以及所有舊圖像,並使用新名稱重新創建具有一組新圖像的所有文件夾。
這樣做會使網站顯示舊圖像集的破碎圖片鏈接,但會顯示所有的狀態和評論,而新圖像集正確顯示但沒有存儲狀態和評論信息。
超出了表格中的所有字段。表格中唯一標識新舊區域的字段是id
,mod_date
(均自動生成)和image_name
。
圖像名稱都共享相同的字符串,但預先添加了不同的路徑信息。
實施例:
舊圖像名稱:XXX_02420624_20100308-00231_A.png
新圖像名稱:YYY_02420624_20100308-00231_A.png
注意02420624_20100308-00231_A.png
正在新舊共享具有不同預會掛起。
我的問題是,如果不是所有的專輯都被更新(即使所有用戶和所有專輯的所有文件夾都被刪除然後再添加回來,但並非所有文件都有新文件名),什麼是消除這些重複數據的最有效方法,並且仍然保留爲每個圖像分配的註釋和狀態?
我想我可以刪除圖像的新行並將舊圖像名稱重命名爲新圖像,以便它正確指向正確的圖像並仍保留狀態/註釋。但是,如何編寫一個搜索自動存儲在數據庫中的新圖像的通用腳本?
編輯:新加入的圖像名稱具有
yyy_userid_albumid_AAA.png
的格式,其中yyy
是所有新圖像,userid
和albumid
預掛起相同的幾乎不言自明,並且AAA
是唯一的圖像名稱。
因爲我知道xxx
和yyy
都是常數,我可以寫一個PHP腳本,通過數據庫自動查找並刪除與yyy
開始IMAGE_NAME條目,然後更改xxx
到yyy
,使圖像點走向正確的道路,仍然保留着地位和評論。我的問題是:你怎麼能寫一個腳本,只在'image_name
'字符串中搜索pre-pend,直到它遇到8位userid
(從0開始)?
你嘗試過這一點?或者至少你有什麼想法可以解決這個問題? –
因爲我知道xxx和yyy都是常量,所以我可以在php中編寫一個腳本,它會自動查看數據庫並刪除以yyy開頭的image_name條目,然後將xxx更改爲yyy,以便圖像指向右側路徑並仍然保留狀態和評論。我的問題是:如何編寫一個只在'image_name'字符串中搜索pre-pend的腳本,直到它遇到8位數的用戶標識符(以0開頭)? – alchuang