エス技研

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 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

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

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

CakePHP 2.3 Model、Controllerの見たい変数の中身をログ出力

CakePHPの Modelや Controllerの変数の中身をログとして出力して見る方法を提供します。

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

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

CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3で保存前にバリデーション結果を取得する2つの方法

CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。

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

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

CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法

CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

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

CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。