gpt4 book ai didi

PHP PDO mySQL 查询 - 最高效的方法

转载 作者:行者123 更新时间:2023-11-29 13:29:56 27 4
gpt4 key购买 nike

我有一个数据库,其中包含 4 个用于构建页面内容的关系表:

content    rel     theme     theme_meta  

rel表匹配 contentID来自content表到对应的rel theme的领域 table 。 theme_meta有一个名为 themeID 的字段将其链接到 theme表。

所以

目前构建页面时我JOIN将内容表添加到 del 表,并将其连接到 theme表和theme_meta表。

对于 content 的每个匹配行,它为我提供了大约 24 行表。

然后我使用一些 php foreach循环将结果重组为每 content 的多维数组行。

这样有效吗?对数据库进行 2 次调用(一次调用 content)会更快、更高效吗?和一个 theme 。这将产生更少的行并且更容易使用,但需要第二次调用数据库。

最佳答案

如上所述,使用单个查询的方法通常是最好的方法(因为数据库查询会产生大量开销)。

事实上,听起来好像您的替代方法每次调用其他查询(在其他表上)来获取连接数据时都会循环遍历一个查询(在 content 表上)的结果:从长远来看,这种方法成本高昂,而且无法很好地扩展。

因此,要从数据组装一个多维数组,您只需对连接的结果进行相应的排序,并在循环结果集时跟踪最后看到的标识符(以便检测何时需要向上遍历结果数组中的级别):

$qry = $dbh->query('
SELECT *
FROM content
JOIN rel USING (contentID)
JOIN theme USING (rel)
JOIN theme_meta USING (themeID)
ORDER BY contentID
');

$arr = array();

$row = $qry->fetch();
while ($row) {
array_push($arr, array());
$cid = $row['contentID'];
do {
array_push(end($arr), $row);
} while ($row = $qry->fetch() and $row['contentID'] == $cid);
}

echo var_export($arr);

然而,我要提醒的是,从数据库查询的结果构建这样一个 PHP 数据结构通常会花费不必要的成本,因为人们可能能够在读取结果集的同时构建和分派(dispatch)必要的输出。

关于PHP PDO mySQL 查询 - 最高效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19616749/

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