查询for循环内部

时间:2013-03-12 20:15:25

标签: php mysql pdo

我想知道是否有办法更有效地做我正在做的事情。现在,我有一个类从数据库中检索状态。它非常简单,不应该真正影响性能。

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万行,我觉得这会对性能产生更大的影响。

我是对的,有什么解决方案?感谢

1 个答案:

答案 0 :(得分:0)

我只想指出我确实解决了这个问题。如果有人想知道为什么foreach循环正在查询播种,那是因为我偶然删除了一条线,我每次都在foreach循环中连接到Facebook api来收集海报的信息。因此,如果有人偶然发现这个问题,那么为了确保我想澄清一下,制作许多facebook-&gt; api电话是一件坏事。将信息保存在数据库中并进行查询。