Php 清理MySQL数据的算法
假设我有一个包含100000条MySQL记录的表,该表有两列:title和description。 还有一个表格,其中包含了所有需要清理的坏话 例如,假设标题列包含字符串“忘记这一点”,亵渎表表示“忘记”字符串应替换为“F******” 目前我用蛮力方法实现了它,但这太慢了。它检查句子中的每个子字符串,并将其与亵渎过滤器中存在的每个字符串进行比较Php 清理MySQL数据的算法,php,mysql,algorithm,codeigniter,Php,Mysql,Algorithm,Codeigniter,假设我有一个包含100000条MySQL记录的表,该表有两列:title和description。 还有一个表格,其中包含了所有需要清理的坏话 例如,假设标题列包含字符串“忘记这一点”,亵渎表表示“忘记”字符串应替换为“F******” 目前我用蛮力方法实现了它,但这太慢了。它检查句子中的每个子字符串,并将其与亵渎过滤器中存在的每个字符串进行比较 public function sanitizeSiteProfanity($word, $replacement) { $query = $
public function sanitizeSiteProfanity($word, $replacement)
{
$query = $this->_ci->db->select('title, description')->get('top_sites')->result_array();
$n = $query->num_rows();
for($i = 0; $i < $n; $i++)
{
str_replace($word, $replacement, $query[$i]['title']);
str_replace($word, $replacement, $query[$i]['description']);
}
}
public function sanitizesteprofanity($word,$replacement)
{
$query=$this->\u ci->db->select('title,description')->get('top\u sites')->result\u array();
$n=$query->num_rows();
对于($i=0;$i<$n;$i++)
{
str_replace($word,$replacement,$query[$i]['title']);
str_replace($word,$replacement,$query[$i]['description']);
}
}
有没有更快的方法来清理所有的子字符串?优化这一点的最佳方法是将替换步骤委托给数据库,让mysql来完成繁重的工作。您需要使用内置的
REPLACE
mysql。缺点(不是很大)是您需要使用显式sql而不是CodeIgniter expression builder。优化这一点的最佳方法是将替换步骤委托给数据库,让mysql来完成繁重的工作。您需要使用内置的REPLACE
mysql。缺点(不是很大)是您需要使用显式sql而不是CodeIgniter表达式生成器。我不知道是否有快速清理数据的方法。似乎你必须循环浏览所有替换词,因为一个标题可能包含多个冒犯性词语
如果你正在寻找完整的单词,一个全文索引和包含应该会加快速度。基本上,您将为每个单词设置一个循环,然后运行:
update table
set title = replace(title, 'F***')
where match (title) against ('Fuck' in boolean mode);
您需要将其放入存储过程循环中。但是,
match()。似乎你必须循环浏览所有替换词,因为一个标题可能包含多个冒犯性词语
如果你正在寻找完整的单词,一个全文索引和包含应该会加快速度。基本上,您将为每个单词设置一个循环,然后运行:
update table
set title = replace(title, 'F***')
where match (title) against ('Fuck' in boolean mode);
您需要将其放入存储过程循环中。但是,match()
会非常快,这可能会大大加快当前的进程。strtr()会快得多您可以显示坏字表中的样本数据吗?strtr()会快得多您可以显示坏字表中的样本数据吗?strtrtr()会快得多吗?您可以显示坏词表中的样本数据吗?需要直接从网站进行清理,我需要用户等待时间尽可能短。这将比在php循环中进行替换更快。还有-什么是“需要直接从网站上完成”的意思?@kjanko如果要求您只在php端执行此操作,而不能执行显式sql查询,请注意,在最初的问题中。需要直接从网站进行消毒,我需要用户等待时间尽可能短。这将比在php循环中进行替换更快。还有-什么是“需要直接从网站上完成”的意思?@kjanko如果要求您只在php端执行此操作,而不能执行显式sql查询,请注意,在最初的问题中。需要直接从网站进行消毒,我需要用户等待时间尽可能短。这将比在php循环中进行替换更快。另外-什么是“需要直接从网站上完成”的意思?@kjanko如果要求您只在php端执行此操作,并且不能执行显式sql查询,请注意,在原始问题中。是否可以使用CodeIgniter的活动记录类生成此操作?在db中进行清理将快得多。不会有数据传输开销。结果足够快。谢谢:)是否可以使用CodeIgniter的活动记录类生成此文件?在db中进行清理将快得多。不会有数据传输开销。结果足够快。谢谢:)是否可以使用CodeIgniter的活动记录类生成此文件?在db中进行清理将快得多。不会有数据传输开销。结果足够快。谢谢:)