gpt4 book ai didi

php - 数据抓取/重组速度

转载 作者:行者123 更新时间:2023-11-29 21:06:41 24 4
gpt4 key购买 nike

这个问题可能被标记为过于宽泛或基于观点,但我冒着风险......

我在 php 中有一个 REST-API,它可以从 mysql 表获取所有数据,其中还包括“hasMany”字段。我们称它们为“帖子”,有许多“评论”。

现在,我正在对注释进行 LEFT JOIN 的一次选择,然后遍历结果以将输出重组为

{ "posts": [
{"id": 1,
"comments": [1,2,3]
},
....
]}

一切都很好,直到我有多个 hasMany 字段,因为这样重构就会变得复杂(现在产生双条目),并且我需要多次循环结果(不是手动,但仍然使用内置函数) .

所以我考虑将我的代码重构为:
1.选择实际项目('post')
2. 选择所有 hasMany 字段('comments'、'anythingelse'...)并添加结果。
这当然会在我的数据库上产生大量操作。

所以我的问题是是否有人有一个简单的答案,例如“更好地从数据库中一次性获取所有数据并在 php 中完成工作”或相反。

是的,我可以自己做基准测试。但首先 - 说实话,我想避免所有的重新编程,只是为了发现它更慢 - 其次,我不知道我的基准测试在优化的(和 Linux)生产机器上是否保持不变(现在我正在开发)在 Windows 上的 easyPhp 上)。

一些信息:“post”表可能会产生数百条记录,与每个 hasMany 相同。但与一些 hasMany 字段相结合,它可能会产生数千个记录集(使用第一种方法)。

最佳答案

使用IN (…) 运算符。

首先,自行获取相关帖子:

SELECT […stuff…] FROM posts WHERE […conditions…]

然后从您获得的结果中获取帖子 ID 列表,并将整个列表替换为以下形式的一组查询:

SELECT […stuff…] FROM comments WHERE post_id IN (1, 2, 3 […etc…])
SELECT […stuff…] FROM anythingelse WHERE post_id IN (1, 2, 3 […etc…])

对每个依赖表运行一个查询就可以了。它并不比运行单个 JOINed 查询昂贵得多;事实上,它可能会更便宜,因为父表中的字段没有重复。

当然,请确保 post_id 列已在子表上建立索引。

关于php - 数据抓取/重组速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755651/

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