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を使うなど、目的や状況によって使い分けるといいかと思います。

 

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

 

今回は以上です。

 

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

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

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

続きを見る

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

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

続きを見る

wordpress
【無料あり】WEB制作を学べるオンラインスクールランキング【副業で稼ぎたい方向け】

  あなたWeb制作の副業で稼ぎたいけど、どのスクールで学ぶのが良いの? スクール選びで失敗はしたくないです。   ↑このような疑問や不安を解決するべく、現役のWebエンジニアがWEB制作を学べるスク ...

続きを見る

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

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

続きを見る

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

  あなたWEB系の自社開発企業に就職したいです。 オススメのスクールを教えて下さい。   結論から話すと、WEB系自社開発に行きやすいスクールのランキングは以下の通り。   第1位:テックアカデミー ...

続きを見る

-PHP

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