2

我有一个简单的脚本来从一个类别中删除文章,删除大约 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);
}

使用此代码删除大约 3k 条文章大约需要 12 小时。我做错了什么还是这就是 Joomla 的工作方式?

我可以简单地执行 MySQL 脚本来删除 #_内容中的行,但是这样就不会处理许多相关的表,例如#_assets、#__ucm*、#__contenttagmap 等。

4

2 回答 2

0

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

尝试使用以下内容,看看是否有任何不同。

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

$db = JFactory::getDbo();

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

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

$db->setQuery($query);

希望这可以帮助

于 2013-08-06T16:57:54.410 回答
0

您可以手动删除 3000 篇文章,方法是将过滤器列表长度设置为 100,选中所有,然后单击删除按钮 30 次。所以很明显,你这样做的方式不是应该发生的事情,尽管基本上这个理论是正确的。

您能否确保除了具有 parent_id == 0 的 root.1 之外,您没有任何资产 ID?还要确保所有文章都正确设置了资产 ID,即确保它们始终是类别 14 资产的父级。

您应该能够使用模型来删除数组。但是,即使循环 3000 次也不应该花费 8 个小时,除非您遇到无限循环,这些循环一遍又一遍地开始并触发失控循环的故障保护。

于 2013-08-07T23:21:25.173 回答