0

上位 5 つの結果を表示し、残りをCakephp 2の「その他」にグループ化するにはどうすればよいですか? フィールド「ページ」を含む「訪問」テーブルがある場合、たとえば100行(さらに多くなる)があり、結果が次のようになる必要があります。

Other    40
/        20
/about   15
/contact 10
/welcome 10
/test     5

これは、通常の Mysql で行う 1 つの方法です。

    SELECT case when v2.page is not null then v1.page else 'other' end AS viewpage, COUNT(*) AS count
    FROM visits v1
    LEFT JOIN 
    (
        SELECT page, COUNT(*) as pcount
        FROM  visits
        GROUP BY page
        ORDER BY pcount DESC
        LIMIT 5
    ) v2 on v1.page = v2.page
    GROUP BY viewpage
    ORDER BY count DESC

しかし、Cakephp 2でこれを行う方法は? Mysqlクエリを作成すれば簡単だと思いました...

4

1 に答える 1

0

パフォーマンスが問題にならない場合 (100 行しか処理していない場合は問題にならない場合) は、すべての結果を取得してから、ループして PHP を使用して合計を計算する方がよいでしょう。

だれかが「データベース クエリができるなら php でやるべきではない」と口論する前に、頭の中で 2 つの解決策を比較し、php の解決策はおそらく次のようになることを認めます。

  • コード行の削減
  • 記述と保守がより簡単かつ迅速に
  • 他人(または未来の自分)が理解しやすい

はい、実行に少し時間がかかりますが、誰もそれに気づきません。

于 2013-09-05T23:20:38.520 に答える