gpt4 book ai didi

mysql - 如何在 Modx Revolution 中递归获取子 id 数组而不使用 getChildIds

转载 作者:行者123 更新时间:2023-11-29 23:03:29 25 4
gpt4 key购买 nike

如果针对大量资源运行 getChildIds 可能会非常慢,因此我尝试编写一个查询和一些代码来更快地获取所有子 ID。

但是我从 getChildIds 和我的脚本中得到了不同的结果。

有人能明白为什么这些会产生不同的结果吗?

使用 getChildIDs 的方法:

$parentDepth = isset($scriptProperties['parentDepth']) ? $scriptProperties['parentDepth'] : 5;

$parents = explode(',', $parents);

$children = array();

foreach ($parents as $parent){

$ids = $modx->getChildIds($parent,10,array('context' => 'web'));

foreach($ids as $id){

$children[] = $id;

}


}

echo ' number of children = ' . count($children);

使用查询和循环的方法:

$comma_separated = implode(",", $parents);

$sql = "SELECT `id` from modx_site_content where `parent` IN (".$comma_separated.") and published = 1 and isfolder = 0 and deleted = 0 and hidemenu = 0;";

$results = $modx->query($sql);

$mychildren = array();

while ($row = $results->fetch(PDO::FETCH_ASSOC)) {


$mychildren[] = $row['id'];

}


for($i=0; $i <= 10; $i++){

$comma_separated = implode(",", $mychildren);

$sql = "SELECT `id` from modx_site_content where `parent` IN (".$comma_separated.") and published = 1 and isfolder = 0 and deleted = 0 and hidemenu = 0;";

$results = $modx->query($sql);

while ($row = $results->fetch(PDO::FETCH_ASSOC)) {


$mychildren[] = $row['id'];

}
}

echo ' number of children = ' . count($mychildren);

getChildIDs 方法运行需要近 1.5 秒,并给出大约 1100 个结果

SQL/脚本方法运行时间不到 0.1 秒,并给出 1700 个结果。

要么我没有正确地将子 id 附加到数组中 ~或者 ~ getChildIDs 可能会过滤掉一些其他结果?

有人知道这里可能发生什么吗?

最佳答案

您可以尝试使用built-in method of pdoFetch .

$pdo = $modx->getService('pdoFetch');
$ids = $pdo->getChildIds('modResource', 0);
print_r($ids);

它也是递归的,但在某些情况下可能更好。当然,你需要install pdoTools首先从存储库中。

关于mysql - 如何在 Modx Revolution 中递归获取子 id 数组而不使用 getChildIds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28389575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com