来自另一个表的SQL更新文本

时间:2016-07-14 09:33:44

标签: php mysql sql-server wordpress

这是我对S.O.的第一个问题。所以请原谅高贵。我也不是因为SQL崩溃所以我很感激任何建议。

我在表 wp_6_posts 上有一个名为 post_content 的列,并且在各行的列中是一个格式为的文本字符串:

http://www.domain.com/52
http://www.domain.com/182
http://www.domain.com/122

在另一个表 wp_6_pmlca_links 中,有些ID的ID号与上面URl末尾的数字相匹配。该表中还有 afflink 列,其中包含我需要的URL(它是该字段中唯一的内容)。

我需要做的是将 post_content 中的整个第一个网址替换为相应 afflink 行中的网址。

非常感谢任何/所有建议。

编辑:

例如,目前 post_content 列包含该行的帖子文本。它可以是几千个字符长,但在它内部将是1,或上面有synatx的一些URL,通常在一个href标记中:

Text here to <a href="http://www.domain.com/23">Text for link</a>

与URL中的数字对应的链接存储在如上所述的单独表中。行结构是:

ID | slug | URL |
----------------
23 |  23  | http://www.externaldomain.com/link |

我需要做的是识别第一个URL,查询以查找相应的URL,并用第二个URL替换第一个URL。

我不知道用什么SQL语法来构造查询我抱歉:(

2 个答案:

答案 0 :(得分:0)

不确定wp_6_pmlca_links中的数据,但请尝试此操作(对于Mysql):

UPDATE wp_6_posts t1
JOIN wp_6_pmlca_links t2
ON t2.ID = substring_index(t1.post_content, '/', -1)
// For sql server, 'substring_index(t1.post_content, '/', -1)' should be 'right(t1.post_content, len(t1.post_content) - charindex(replace(t1.post_content, '//', '$$'), '/'))'
SET t1.post_content = t2.afflink

答案 1 :(得分:0)

试试这个但我在sql中写的这个查询。

update a
set a.post_content =b.URL 
from wp_6_posts a 
inner join wp_6_pmlca_links  b on convert(int,replace(a.post_content,'http://www.domain.com/',''))=b.id

这也适用于mysql。