最近做一个项目(项目是采用的第三方的内容php框架+mysql搭建的),项目中有个功能需要采集大量的文章数据,数据库中直接存储的是文章的网址(举例:http://www.xxx.com/article?id=111)。
所以网站采集过后需要批量处理文章的url网址更换成现有的域名,需要大批量的更换数据库文章链接,查看了项目原来更新的方式是采取读取文章URL,再后端程序批量替换,这样操作耗时而且会造成程序页面卡死终止运行。
想优化这种更新方式,思考着采用sql代码上操作速度应该很快。
通过实验mysql中replace 函数是不能直接使用正则表达式替换的。
网络搜索也没找到好的解决办法。通过自己研究采用replace 函数+ REGEXP 函数、再集合其他字符串处理做出来的批量更新url字符串中的网址。
解决方案和思路如下:
注释:id , url 是你数据库存储链接的字段名。以下举例都是以https:// 做的。
1、先验证域名是哪种方式(http 或者https)
a、如果url是以http或者https开头的则进入下一个验证:再次验证区分具体是HTTP 或者https 。
b、如果url不是以http或者https开通的则直接返回URL。
select if(url REGEXP '^(https:\/\/)|(http:\/\/)',if(url REGEXP '^(https:\/\/)','','0'), url ) ,id,url from table_name
2、先排除url中的http:// 或者 https:// 用于后续取值使用
SUBSTRING(url,LENGTH('https://')+1) /