エス技研

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で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

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

CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定

CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。

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

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

CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ

CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。

CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法

CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。

CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法

CakePHP3で検索をするプラグイン「friendsofcake/search」の検索条件のカスタマイズ方法の解説。検索項目を増やしたり、以上、以下での検索や、チェックボックスによる検索の方法などを解説。

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

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

CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.1.5対応
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応

CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。

CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。