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();

1 つのクエリだけでこの結果を得る方法があるかどうか知りたいですか?

それは最適化と美しさの問題です。

誰かが私の質問により良いタイトルを提案できる場合は、どういたしまして。

4

2 に答える 2

3

お知らせするために、$allDatasAgenda配列です。
配列要素の数を取得するために、PHP には関数があります - 驚きです! -count()

于 2013-09-30T13:57:41.343 に答える
1

最適化の場合:

  • データベースにインデックスを追加activationする 少なくとも列にはインデックスが必要ですが、 でソートされた結果が必要date_publicationになるため、 でのインデックスは非常に便利です(activation,date_publication)
  • データベースのすべてのコンテンツを HTML ページに表示することは避けてください。に 1000 行を超えるとどうなりますsite_agendaか? 結果配列をカウントするのは良いトリックですが、通常、プログラムがカウント クエリと詳細結果クエリを実行する場合は、結果クエリでLIMITOFFSETを使用してデータをページ分割するためです。データのページ分割とは、ユーザーに 50 行を超える行を表示しないようにすることを意味しますが、データベースから 50 行を超える行を取得することで時間、メモリ、および帯域幅を失うことを回避することも意味します (50 は例ですが、html で 1000 行を読みたい人はいません)。ページ)。したがって、最後に、行数を知るために count クエリが必要になり、結果でこれらの行をすべて取得するべきではありません。
于 2013-09-30T16:26:31.920 に答える