我在数据库中有一个表,该表存储可以从服务器上检索的图像文件的名称。
表格说明如下:
+------------+-----------------+------+-----+-------------------+-------+
| 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 脚本,它扫描图像文件夹中的新文件并将它们添加到数据库中。但是,试图更新数据库的人删除了所有文件夹(对于每个用户 ID 和专辑...)以及所有旧图像,并使用一组具有新名称的新图像重新创建了所有文件夹。
这使得网站显示旧图像集的图片链接损坏,但所有状态和评论都在那里,而新图像集正确显示,但没有存储状态和评论信息。
在表中的所有字段中。表中唯一区分新旧的字段是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
andyyy
都是常量,所以我可以在 php 中编写一个脚本,该脚本会自动查看数据库并删除以 image_name 开头的条目,yyy
然后将其更改为xxx
,yyy
以便图像指向正确的路径并仍然保留状态和评论。我的问题是:你怎么能写一个脚本,只在 ' image_name
' 的字符串中搜索 pre-pend 直到它达到 8 位userid
(以 0 开头)?