我想知道是否有办法更有效地做我正在做的事情。现在,我有一个从数据库中检索状态的类。这很简单,不应该真正影响性能。
public function get ($var1, $var2, $var3)
{
$feed = array(); //Initialize an empty array
//Query the database
$Statement = $this->Database->prepare("SELECT id, name, excerpt, post, timestamp, tags, title FROM posts WHERE col1 = ? AND col2 = ? AND col3 = ? ORDER BY id DESC LIMIT 15");
$Statement->execute(array($var1, $var2, $var3));
while($row = $Statement->fetch(PDO::FETCH_ASSOC))
{
$posts[] = array( "id" => $row["id"], /*etc...*/ );
}
return $posts;
} //end get
然后我的页面设置了这样的东西,我知道这根本没有效率:
<?php for ($count = 1; $count <= $total; $count++): //Display the calendar
echo $count;
$feed = $Feed->get($count, $total, $var3);
foreach ($feed as $post):
echo $post["id"];
endforeach;
endfor; ?>
我希望这是有道理的。那里有更多的 html 和所有内容。现在我的数据库中只有 18 行,加载页面需要 10 秒。这真的很糟糕。由于网站的设计,我必须以这种方式进行设置。所以 foreach 循环必须在 for 循环中,因为整个事情都设置为日历。
我的问题是选择所有行,将它们保存在 for 循环之外然后使用该数组是否会更有效,或者是否最好按照我现在的方式在 foreach 循环中运行每个查询(我已经阅读了很多,并且知道大多数人都说这是一个巨大的不,不)。如果我使用前一个选项并且数据库中有一百万行,我会遇到什么样的问题。
我希望这是有道理的。如果没有,我会更新问题。现在虽然大约 30 个查询只访问 1 或 2 行。但我能想到的唯一其他选择是选择表中的所有行,然后使用该数组,但如果数据库中有 100 万行,我觉得这会影响性能更多。
我是对的,有什么解决方案?谢谢