gpt4 book ai didi

php - 删除具有相似名称的数据库重复项

转载 作者:行者123 更新时间:2023-11-29 13:43:07 25 4
gpt4 key购买 nike

我在数据库中有一个表,用于存储图像文件的名称,可以从服务器上检索它们。

表格说明如下:

+------------+-----------------+------+-----+-------------------+-------+
| 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...)以及所有旧图像,并使用一组具有新名称的新图像重新创建了所有文件夹。

这使得网站显示旧图像集的损坏图片链接,但其中包含所有状态和评论,而新图像集显示正确,但没有存储状态和评论信息。

在表中的所有字段中。表中唯一区分新旧的字段是 idmod_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 是所有新图像的前缀相同,useridalbumid 几乎不言自明,并且 AAA 是唯一的图像名称。

由于我知道 xxxyyy 都是常量,因此我可以在 php 中编写一个脚本,自动查找数据库并删除以 image_name 开头的条目yyy,然后将xxx更改为yyy,以便图像指向正确的路径并仍然保留状态和注释。我的问题是:如何编写一个脚本,只在 'image_name' 字符串中搜索前缀,直到它达到 8 位 userid (以开头) 0)?

最佳答案

似乎您需要将新名称链接到旧图像的记录。

下面的 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>))

关于php - 删除具有相似名称的数据库重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com