You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询中如何改写URL以实现HTTP/HTTPS的LIKE关联?

解决HTTP/HTTPS URL关联匹配问题

这个场景太常见了——不同协议的URL导致关联逻辑失效,其实我们可以通过统一URL协议格式或者直接忽略协议部分来搞定,下面给你两种实用方案:

方案一:将sites.url统一转为HTTP格式

直接把sites.url里的https://替换成http://,不管原URL是HTTP还是HTTPS,都会统一成HTTP协议再去匹配sites_links.naar。修改后的完整查询如下:

SELECT 
    *, 
    sites.id AS id, 
    sites.url AS url, 
    COUNT(sites_links.id) AS netwerklinks 
FROM sites 
LEFT JOIN data ON sites.id = data.id 
LEFT JOIN sites_links ON sites_links.naar LIKE CONCAT('%', REPLACE(sites.url, 'https://', 'http://'), '%') 
WHERE sites.url IS NOT NULL 
GROUP BY sites.id;

这个方法的优势是改动极小、逻辑直观,而且REPLACE函数几乎所有SQL数据库都支持,兼容性拉满。如果原URL本身就是HTTP协议,REPLACE会因为找不到https://而直接返回原URL,完全不影响结果。

方案二:忽略协议部分进行匹配

如果未来可能出现其他协议(比如ftp://),可以直接去掉所有开头的协议部分,只匹配域名和路径。用支持正则替换的函数(比如MySQL 8+、PostgreSQL、SQL Server 2017+的REGEXP_REPLACE)来实现:

SELECT 
    *, 
    sites.id AS id, 
    sites.url AS url, 
    COUNT(sites_links.id) AS netwerklinks 
FROM sites 
LEFT JOIN data ON sites.id = data.id 
LEFT JOIN sites_links ON 
    sites_links.naar LIKE CONCAT('%', REGEXP_REPLACE(sites.url, '^https?://', ''), '%') 
WHERE sites.url IS NOT NULL 
GROUP BY sites.id;

这里^https?://会精准匹配开头的http://或https://,替换为空后两边都只保留域名及后续内容,自然就能匹配上了。

兼容老版本数据库的替代写法

如果你的数据库不支持正则替换,也可以用嵌套REPLACE实现同样效果:

REPLACE(REPLACE(sites.url, 'https://', ''), 'http://', '')

内容的提问来源于stack exchange,提问作者Silver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:42:33