Php 删除具有相似名称的数据库副本
我在数据库中有一个表,该表存储可以从服务器上检索的图像文件的名称 下表说明如下:Php 删除具有相似名称的数据库副本,php,mysql,Php,Mysql,我在数据库中有一个表,该表存储可以从服务器上检索的图像文件的名称 下表说明如下: +------------+-----------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------------+------+-----+----------------
+------------+-----------------+------+-----+-------------------+-------+
| 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和albumid的所有文件夹。。。以及所有旧图像,并使用一组具有新名称的新图像重新创建所有文件夹
这使得网站显示旧图像集的断开图片链接,但其中包含所有状态和评论,而新图像集显示正确,但未存储状态和评论信息
在表中的所有字段中。表中唯一区分新旧的字段是自动生成的id、mod_日期和图像名称
这两个映像名称共享相同的字符串,但使用不同的路径信息进行挂起
例如:
旧图像名称: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编写一个脚本,自动浏览数据库,删除image_name以yyy开头的条目,然后将xxx更改为yyy,以便图像指向正确的路径,并且仍然保留状态和注释。我的问题是:如何编写一个脚本,只在“image_name”字符串中搜索pre-pend,直到它到达以0开头的8位用户名?似乎需要将新名称链接到旧图像的记录 下面的SQL应该用新的图像名称更新所有旧“xxx”图像的图像名称。然后,您只需删除以yyy为前缀添加的新记录 未经测试
update the_table t
set t.image_name =
(select COALESCE(t2.image_name,t.image_name)
from the_table t2
where = t2.image_name = 'yyy' || substring(t.image_name,<size of xxx>))
你在这一点上做了什么?或者至少你对如何处理这个问题有什么想法?因为我知道xxx和yyy都是常量,我可以用php编写一个脚本,自动浏览数据库,删除图像名称以yyy开头的条目,然后将xxx更改为yyy,这样图像就指向正确的路径,并且仍然保留状态和注释。我的问题是:如何编写一个脚本,只在“image_name”字符串中搜索pre-pend,直到它到达以0开头的8位用户ID?能否在括号内澄清您的代码?从_表t2中选择t2.image_name,其中substringt.image_name、=substringt2.image_name和t2.image_name='yyy'| | substringt2.image_name,其中substring=substring,我认为它们是相同的?我稍微修改了它以删除该过滤器。现在让我知道这是否更有意义。如果新版本不存在,联合将使用t.image_name old。感谢您的帮助!我理解声明的大意,但也有一些错误。其中t2.image_name='yyy',而| |不应该改为追加吗?这应该是追加,是的。我收到以下错误错误:1093 HY000:您不能为FROM子句中的update指定目标表't'。我认为它不允许从from语句中的同一个表调用,有什么解决方法吗?