Joomla 3.1:批量删除速度极慢

时间:2013-08-06 16:43:11

标签: joomla

我有一个简单的脚本来删除类别中的文章,删除大约10k文章需要永远删除,这是我的代码:

//include libraries

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$query->select(array('id'));
$query->from('#__content');
$query->where('catid = 14');
$db->setQuery($query);
$results = $db->loadObjectList();

$table = JTable::getInstance('Content', 'JTable', array());
foreach ($results as $article)
{
    $table->delete($article->id);
}

使用此代码大约需要12个小时才能删除大约3k文章。我做错了还是Joomla的工作原理?

我可以简单地使用MySQL脚本来删除#_ 内容中的行,但是这样很多相关的表都不会被处理,例如# _assets,#__ ucm *,#_ ontenttagmap等。

2 个答案:

答案 0 :(得分:0)

12小时是删除3k文章的极长时间。我希望它需要一分钟/几分钟。

尝试使用以下内容查看是否有任何区别。

注意:在尝试此代码之前,请确保备份数据库!

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$conditions = array(
    'catid=14');

$query->delete('#__content');
$query->where($conditions);

$db->setQuery($query);

希望这有帮助

答案 1 :(得分:0)

您可以手动删除3000篇文章,方法是使过滤列表长度为100,检查全部,然后单击删除按钮30次。很明显,你做这件事的方式不是应该发生的事情,尽管基本上理论是正确的。

请问你确定除了root_之外没有asset_id还有parent_id == 0吗? 还要确保所有文章都正确设置了资产ID,即确保它们始终是第14类资产的父级。

您应该能够使用该模型删除数组。但是,即使循环3000次也不应该花费8个小时,除非你有无限循环重复启动并触发失控循环的故障保护。