Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 清理MySQL数据的算法_Php_Mysql_Algorithm_Codeigniter - Fatal编程技术网

Php 清理MySQL数据的算法

Php 清理MySQL数据的算法,php,mysql,algorithm,codeigniter,Php,Mysql,Algorithm,Codeigniter,假设我有一个包含100000条MySQL记录的表,该表有两列:title和description。 还有一个表格,其中包含了所有需要清理的坏话 例如,假设标题列包含字符串“忘记这一点”,亵渎表表示“忘记”字符串应替换为“F******” 目前我用蛮力方法实现了它,但这太慢了。它检查句子中的每个子字符串,并将其与亵渎过滤器中存在的每个字符串进行比较 public function sanitizeSiteProfanity($word, $replacement) { $query = $

假设我有一个包含100000条MySQL记录的表,该表有两列:title和description。 还有一个表格,其中包含了所有需要清理的坏话

例如,假设标题列包含字符串“忘记这一点”,亵渎表表示“忘记”字符串应替换为“F******”

目前我用蛮力方法实现了它,但这太慢了。它检查句子中的每个子字符串,并将其与亵渎过滤器中存在的每个字符串进行比较

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中进行清理将快得多。不会有数据传输开销。结果足够快。谢谢:)