我有一个包含一系列唯一网址的数据库,所有这些网址都包含带有"://"的前导http或https。在里面。一些网址还有额外的" //"用字符串。
我有三个需要解决的问题。
首先,我需要使用url查找带有额外双正斜杠的所有行,而不会从前导http中获得误报。
其次,我需要str_replace" //"用" /"没有影响领先" http://"和" https://"所以我可以更新一行。
和第三个,如果该行是重复的,则删除该行,因为该行已被INSERTed而没有双正斜杠。
我不知道如何跳过第一次出现" //"在MYSQL命令中......如果我能找到错误的网址,我可以自己解决其他两个问题。
$sql = "SELECT * FROM `search` WHERE `url` NOT LIKE 'http://'
OR NOT LIKE 'https://' AND LIKE '%//%'" ;
答案 0 :(得分:0)
在其中的某处找到http://
或https://
或<{p}}
或强>
在其中某处//
找不到http://
而不是https://
//
这将用于查找行但不能替换。
答案 1 :(得分:0)
首先,我需要使用url查找带有额外双正斜杠的所有行,而不会从前导http中获得误报。
使用Bug.State
方法,但从字符串中的第7个字符开始。这是在LOCATE
和http://
https:/
其次,我需要使用“/”str_replace“//”而不影响前导“http://”和“https://”,以便我可以更新该行。
首先用 LOCATE('//', `url`, 7) != 0
替换://
,然后进行替换。之后还原:\/\/
。
:\/\/
和第三个,如果该行是重复的,则删除该行,因为该行已被INSERTed而没有双正斜杠。
如果您不关心哪两条记录被删除。最简单的方法是创建一个强制MySQL删除重复项的唯一索引。
REPLACE(REPLACE(REPLACE(`url`,'://',':\/\/'),'//','/'),':\/\/','://')
请注意 ignore 的使用,它告诉MySQL不要在重复项上触发错误。
然后您可以删除索引。
答案 2 :(得分:-1)
MySQL支持完整的正则表达式,因此您也可以将http(s)
前缀与此匹配:
SELECT ... WHERE url RLIKE 'https?://.*//.*';