0

这段代码运行良好,但我想知道是否有办法优化它。

我使用 PDO 和 foreach 循环发出请求,并显示存储在数据库中的所有文章。

$allDatasAgenda = $bdd->query('SELECT id, cat_id, text, img FROM site_agenda 
                                WHERE activation = 1 
                                ORDER BY date_publication')->fetchAll(PDO::FETCH_ASSOC);

<?php 
    $i=1; 
    foreach($allDatasAgenda AS $data_agenda): 

        // generate all html

    endforeach; 
    reset($allDatasAgenda); 
 ?>

由于某些原因,我需要知道数据库中存储了多少文章(我需要在最后一个类中添加一个类,以使我的下一个/上一个 jquery 函数工作)。

所以,我做这个:

$countArticlesAgenda = $bdd->query('SELECT count(*) FROM site_agenda WHERE activation = 1');
$count_articles_agenda = $countArticlesAgenda->fetchColumn();

我想知道是否有一种方法可以仅通过一个查询获得此结果?

这只是优化和美观的问题。

如果有人可以为我的问题建议一个更好的标题,不客气。

4

2 回答 2

3

让你知道,$allDatasAgenda是数组。
为了获得数组元素的数量,PHP 有一个名为 - 惊喜的函数!-count()

于 2013-09-30T13:57:41.343 回答
1

对于优化:

  • 在数据库上添加索引activation您至少应该在列上有一个索引,但是您需要一个排序结果 on date_publication,所以索引 on(activation,date_publication)将非常有用。
  • 避免在 html 页面上显示数据库的所有内容。当您的行数超过 1000 行时会发生什么site_agenda?计算结果数组是一个不错的技巧,但如果通常程序执行计数查询和详细结果查询,那是因为它们在结果查询上使用LIMITOFFSET来对数据进行分页。对数据进行分页意味着避免向用户显示超过 50 行,但也可以通过从数据库中检索超过 50 行来避免浪费时间、内存和带宽(50 是示例,但没有人愿意在 html 中读取 1000 行页)。所以最后你肯定需要一个计数查询来知道你有多少行,你不应该在结果中得到所有这些行。
于 2013-09-30T16:26:31.920 回答