1

我正在为这个查询而苦苦挣扎,想知道我是否在浪费时间并需要编写一个 php 脚本,或者类似下面的内容实际上可能吗?

UPDATE my_table 
SET @userid = user_id 
AND SET filename('http://pathto/newfilename_'@userid'.jpg')
FROM my_table 
WHERE filename 
LIKE '%_%' AND filename 
LIKE '%jpg'AND filename 
NOT LIKE 'http%';

基本上我有 700 个奇怪的文件需要在数据库中重命名,因为它们在我更改系统时与文件名不匹配,它们在数据库中被调用。格式2_gfhgfhf.jpg转换为userid_randomjumble.jpg

但并非数据库中的所有文件都采用这种格式,只有大约 700 万分之几。所以我想识别包含_ 但不包含的名称http(这是我不想触摸的正确格式)。

我可以做到这一点,但现在有点棘手!

我想将该文件名替换userid_randomjumble.jpghttp://pathto/filename_userid.jpg所以我想将该行中的列 user_id 设置为一个变量并将其插入到我的新文件名中。

由于明显的原因,上述方法不起作用,但我不确定是否有办法绕过我正在尝试做的事情。我不知道这是否可能?我是不是在浪费时间,我应该用 mysql 转向 PHP 并停止偷懒吗?或者有没有办法让它工作?

4

2 回答 2

1

是的,没有 php 是可能的。这是一个简单的例子

SET @a:=0;
SELECT * FROM table WHERE field_name = @a;
于 2012-04-12T16:50:36.643 回答
0

是的,您可以使用简单的 SQL 来做到这一点:

UPDATE my_table 
SET filename = CONCAT('http://pathto/newfilename_', userid, '.jpg')
WHERE filename LIKE '%\_%jpg'
AND filename NOT LIKE 'http%';

笔记:

  • 不需要变量。可以引用任何正在更新的行列
  • 在mysql中,用于CONCAT()将文本值相加
  • 使用LIKE,下划线 ( _) 具有特殊含义 - 它表示“任何单个字符”。如果要匹配文字下划线,则必须使用反斜杠 ( \)对其进行转义
  • 您的两个LIKE谓词可以安全地合并为一个以进行更简单的查询
于 2012-04-12T17:05:36.917 回答