此代码运行良好,但我想知道是否有一种方法可以优化它。
我使用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);
?>
由于某些原因,我需要知道在数据库中存储了多少篇文章(我需要在最后一篇文章中添加一个类才能使我的next / prev jquery函数正常工作)。
所以,我这样做:
$countArticlesAgenda = $bdd->query('SELECT count(*) FROM site_agenda WHERE activation = 1');
$count_articles_agenda = $countArticlesAgenda->fetchColumn();
我想知道是否有办法只用一个查询获得此结果?
这只是一个优化和美丽的问题。
如果有人可以为我的问题提出更好的标题,那么欢迎你。
答案 0 :(得分:3)
为了通知您,$allDatasAgenda
是数组
为了获得数组元素的数量,PHP有一个叫做的函数 - surprise! - count()
答案 1 :(得分:1)
进行优化:
activation
列上有一个索引,但是您需要date_publication
上的排序结果,因此{{1}上的索引1}}真的很有用。(activation,date_publication)
中的行数超过1000行,会发生什么?计算结果数组是一个很好的技巧,但如果通常程序perfroms计算查询和详细结果查询,那是因为他们在结果查询上使用 LIMIT 和 OFFSET 来对数据进行分页。对数据进行分页意味着避免向用户显示超过50行,还要通过从数据库中检索超过50行来避免浪费时间,内存和带宽(50是一个示例,但是没有人想要在html中读取1000行页)。所以最后你肯定需要一个计数查询来知道你有多少行,你不应该在结果上得到所有这些行。