エス技研

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 5.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する

CakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

getParam('action')で取得するアクション名は別関数に移動しても不変
getParam('action')で取得するアクション名は別関数に移動しても不変

CakePHP4系、5系では「getParam()」で処理中のアクション名を取得できる。そのアクションから別関数を呼び出してた関数でアクション名を調べたが同一の名称だった。

CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll

主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。

CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。

CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法

CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。

CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。

CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も

CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。

CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法

CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。

CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。