在我维护的网站中,我需要查询同一个表(文章)两次,每个类别的文章一次。 AFAIT 基本上有两种方法可以做到这一点(也许有人可以建议更好的第三种方法?):
- 执行数据库查询两次,这意味着数据库服务器必须对整个表进行两次排序。每次查询后,我都会遍历光标,为页面上的列表条目生成
html
。 - 仅执行一次查询并提取所有记录,然后将它们排序到两个单独的数组中。之后,我必须分别迭代每个数组才能生成
HTML
。
所以是这样的:
$newsQuery = $mysqli->query("SELECT * FROM articles WHERE type='news' ");
while($newRow = $newsQuery->fetch_assoc()){
// generate article summary in html
}
// repeat for informational articles
对比这个:
$query = $mysqli->query("SELECT * FROM articles ");
$news = Array();
$info = Array();
while($row = $query->fetch_assoc()){
if($row['type'] == "news"){
$news[] = $row;
}else{
$info[] = $row;
}
}
// iterate over each array separate to generate article summaries
记录集不是很大,当前<200,可能会增长到1000-2000。两种方法之间的时间是否有显着差异?如果有,哪一种更快?
(我知道这整个事情看起来效率非常低,但这是我继承的一个编码很差的网站,并且必须在没有重构整个事情的预算的情况下照顾......)
我用 PHP 编写,没有框架:(,在 MySql 数据库上。
编辑
我刚刚意识到我遗漏了一个主要细节。在网站的给定页面上,我们将一次显示(并因此从数据库中检索)不超过 30 条记录 - 但问题是:15 篇信息文章和 15 篇新闻文章。在每一页上,我们都会提取每种类型的下 15 个。
最佳答案
你知道你可以在数据库中排序吗?
SELECT * FROM articles ORDER BY type
关于php - 数据库调用或使用数组哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305568/