gpt4 book ai didi

PHP MySQL递归慢,如何加速?

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

我有一个返回大约 25000 个结果的递归 MySQL 查询,这需要很长时间才能加载。

我想知道是否有办法对结果进行分页或使事情变得更快。

代码如下:

function getChildIds($id) {    
echo ' <tr><td> Client No.: </td><td> ';echo $id;echo ' </td></tr> ';

$sql_query="select id from rev_r_clients WHERE parent_client_id='$id'";
$res = mysql_query($sql_query);
$ids = Array();
while($row = mysql_fetch_object($res)){
if ($row->id) {
$ids[] = $row->id;
}
}

array_walk($ids, 'getChildIds');
}

最佳答案

正如其他人所提到的,主要问题是您正在为每个用户运行一个 MySQL。这样做的开销可能很大,因此您最好减少查询量。

一种方法是在单个查询中查询所有数据,然后按照您的操作递归处理。但是,从表面上看,您只想获得所有用户的所有 child 。 您可以通过单个 MySQL 查询以一种非常简单的方式做到这一点:

 SELECT
p.id AS parent,
GROUP_CONCAT(c.id) AS children
FROM
rev_r_clients AS p
JOIN rev_r_clients AS c ON c.parent_client_id = p.id
GROUP BY
p.id

这将在单个查询中为您提供每个用户及其 child 。之后您可以使用 explode 将它们放入一个数组中(因为 GROUP_CONCAT 将为您提供一个逗号分隔的列表)。


根据您的评论,您只想创建一个用户树。根据信息,这是您可以使用的代码:

# NOTE: I am using mysqli, that is what you should do as well
$res = $mysqli_conn->query(<THE_QUERY_ABOVE>);
$parents = Array();

while($row = $res->fetch_assoc()) {
$parents[$row['parent']] = explode($row['children'])
}

代码运行后,$parent 数组是 ID 到子 ID 数组的映射,您可以将其用于任何需要/想要的用途。如果 ID 不在数组中,则表示它没有 child 。

关于PHP MySQL递归慢,如何加速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714697/

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