PHP

CakePHP2でサブクエリを使ってジョイン(join)する方法

2021年2月17日

CakePHP2でサブクエリを使ってジョイン(join)する方法と書かれた画像

 

今まではサブクエリを使うときは、sqlを直書きしていたのですが、where句が動的に変わったりするとやっぱりめんどくさかったりするのでcakephp2の機能を利用してサブクエリを発行してみました。

 

この記事では以下のことを紹介しています。

・Cakephp2でサブクエリを使う方法

・サブクエリで生成されたテーブルをジョインする方法

 

CakePHP2でサブクエリを使ってジョイン(join)するコードを解説します

 

早速ですがコードを紹介していきます。

cakephp2系ではbuildStatementを使えばサブクエリを使ったコードが実現できるようです。

 

使用するコード

 

コードは以下のとおりです。

条件や抽出したいカラム、テーブル名は各自で好きなものにしてみてください。

 

// データソースを定義
$db = $this->Model->getDataSource();
// サブクエリの条件(この辺はお好きにどうぞ)
$subQueryCondition = ['Sub1.column =' => $変数とか固定値とか];
//サブクエリ
$subQuery = $db->buildStatement(['fields' => ['Sub1.id','Sub1.testcolumn','COUNT(Sub1.id) as count'], 'table' => 'サブクエリで使いたいテーブル名', 'alias' => 'Sub1', 'conditions' => $subQueryCondition, 'group' => ['Sub1.to_id','Sub1.testcolumn'],], $this->Model);
//join
$joins = [['type' => 'LEFT', 'table' => 'ジョインしたいテーブル', 'alias' => 'YourTable1', 'conditions' => ['YourTable1.to_id = Model.id']], ['type' => 'LEFT', 'table' => '(' . $subQuery . ')', 'alias' => 'Sub', 'conditions' => ['Sub.test_id = Model._id']]];
//発行するSQLの条件
$conditions = ['Model.id' => $変数とか固定値とか];
//SQL実行
$result = $this->Model->find('all', ['fields' => '*', 'conditions' => $conditions, 'order' => ['Model.created DESC'], 'joins' => $joins]);

知っておけば結構役に立つかもしれない

 

仕事ではどうしても古いシステムを触らないといけないときもあります。

今、cakephp2系を使っている方は参考にしてみてください。

データベースが絡んだ処理でサブクエリを使う機会はちょいちょいあるので役に立つかと思います。

 

CakePHP2でサブクエリを使う方法【番外編】

 

上記のやり方以外にもCakePHP2でサブクエリを使ったSQLを利用することができます。

ここではもう1つの方法を解説していきます。

 

query()の使用

 

CakePHP2でサブクエリを使うもう1つの方法がqueryを使うことです。

コードは次のような感じになります。

 

    $sql = "SELECT *
FROM
    (
        SELECT
            *
        FROM
            sub_table
        WHERE
            yourcondition
    ) AS sub
GROUP BY
    columun";
        $data = $this->query($sql);

 

where句が動的に変わらない場合や、シンプルなSQLの場合はquery()メソッドを使ったほうがいいかと思います。

 

コードを見る側にとっても読みやすいですしね。

 

場合によって使い分けよう

 

プレースホルダの処理がごちゃごちゃしそうな場合はcakephp2の機能を利用してサブクエリを使う、そうでない場合はqueryを使うなど、目的や状況によって使い分けるといいかと思います。

 

両方使えるようになっておくことで実装の幅も広がるはずです。

 

今回は以上です。

 

プログラミングスクールに関する情報

2021年最新プログラミングスクール おすすめランキング 【WEBエンジニアになりたい方向け】と書かれた画像
【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】

  あなたプログラミングスクールに通いたいけどたくさんありすぎてどこがいいのかわかりません。   最近はエンジニアブームということもありプログラミングスクールが増えました。 一方でたくさんありすぎてど ...

続きを見る

フリーランス
無料あり:フリーランスを目指せるプログラミングスクールランキング【体験をもとに徹底分析しました】

  あなたフリーランスエンジニアを目指すことができるプログラミングスクールってありますか?   最近では、高年収や働きやすさの魅力からフリーランスエンジニアを目指す方も増えてきまし ...

続きを見る

返金保証ありのプログラミングスクールランキング【エンジニアが選びました】と表示されたパソコンの画面
返金保証ありのプログラミングスクールランキング【エンジニアが選びました】

  あなた返金保証がついているオススメのプログラミングスクールってありますか?   結論から話すと、返金保証つきのプログラミングスクールランキングは次の通りです。 1位:テックキャンプ  【転職成功率 ...

続きを見る

WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】と書かれた画像
WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】

  あなたWEB系の自社開発企業に就職したいです。 オススメのスクールを教えて下さい。   エンジニアを目指すにあたってまず最初に自社開発企業への転職を希望する方がほとんどです。 ...

続きを見る

プログラミンングスクールに無料で通うならココ【現役エンジニアおすすめ】と書かれた画像
プログラミンングスクールに無料で通うならココ【現役エンジニアおすすめ】

  あなたプログラミングスクールに通いたいけどどのスクールも何十万もして通えません。コスパよくエンジニアになれるスクールはありますか?   今回はコスパが良いどころか完全に無料でプ ...

続きを見る

-PHP

© 2021 エンジニアてんし君ブログ