我在数据库中有一张表,用于存储可从服务器上检索图像文件的名称。删除具有类似名称的数据库重复项
表说明如下:
+------------+-----------------+------+-----+-------------------+-------+
| 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