エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法

   

Search Pluginで検索処理 設置方法 その8

 

検索Plugin CakeDC/Searchの関連記事、および、CakePHP3に関連する記事

 
ここしばらくは CakePHP3の記事を書いていましたが、CakePHP2で開発をしたシステムのメンテナンス、機能拡張の案件も多く、今回の記事はそんな CakePHP2で開発した案件に関しての記事です。
 
CakePHP2の検索プラグイン「CakeDC/Search」を使った処理で、重複レコードを省く group by句(distinct句)の使い方について解説します。
 
 
CakePHP2の「CakeDC/Search」に関連する記事は、下記に書いていますので、あわせて参考にしてください。
 
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
 
 
また、CakePHP3に関する記事は、以下に一覧ページがあります。
「CakePHP3」に関する記事一覧https://blog.s-giken.net/tag/cakephp3
 
 

検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)を実装

 
検索Plugin CakeDC/Searchの基本的な使い方については、先にも書いていますが、に記事を書いていますので、その記事を参考にしてください。
 
基本的な使い方が分かっている前提で解説を行っていきます。
また、テーブルの設定なども「CakePHP 2.3 Search Pluginで検索処理 その1設置方法」の記事をベースに解説しています。
 
 
検索Plugin CakeDC/Searchを使う場合でも、重複を省く group by(distinct)を実装する場所は、CakeDC/Searchの中ではなく、下記のサンプルソースの 36行目に書いていますが、paginatorの処理の中に設定します。
 
そのため、group by(distinct)の実装方法は、「CakeDC/Search」プラグインを使う場合でも、find()関数を使う場合でも変わらない、ということになります。
 

 
 
Modelは特に変更するところがないので「CakePHP 2.3 Search Pluginで検索処理 その1設置方法」のソースのコピペです。
 
(/app/Model/User.php)

 
 

重複を省く場合でも group byを。distinctは使わない

 
重複を省く処理は、CakePHPでは「group by」を使うことを想定しているようです。
 
(CakePHP 2.x) 重複を取り除いた場合のPaginateのページ数
http://www.tailtension.com/cakephp/1116/
 
重複行のまとめ方はGROUP BY?DISTINCT?
https://qiita.com/tori076/items/ef7ac4301f9c20491bae
 
これらの記事を読むと、MySQLでは「distinct」より「group by」の方が早いようです。
もしかすると、CakePHPを作っている方々は、この状況を知っていて、CakePHPでは「distinct」は要らない、「group by」を使えば事足りるじゃないか、という作りになっているのかもしれません。

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)

CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。

CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定

CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。

CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説

CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。

CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合

アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。

CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを

CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。

CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応

CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!

CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説

CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。

CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい

アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。

CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説

WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。