質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.12%

SQL文をcake php2系に変換した場合のコードが知りたい(該当レコード以外により大きいレコードがない場合の値をfindで取得方法)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,694

score 57

◉実現したい事
下記SQL文をcake php2系に変換した場合、どのようなコードになるか知りたいです。
該当レコード以外により大きいレコードがない場合の値をfindで取得したいです。

◉現状の問題

◉SQL文

SELECT *
FROM users_interviews AS m
WHERE NOT EXISTS (
    SELECT id
    FROM users_interviews AS s
    WHERE m.users_id = s.users_id
    AND m.created < s.created )

◉上記SQL文を下記PHP文に変換して、コードを記述したいです。

$users_interviews = $this->Users->find('all', array(
        'conditions'=>array(
            'UsersInterview.scheduled >='=> $tommorow->format('Y-m-d').' 00:00:00',
            'UsersInterview.scheduled <='=> $tommorow->format('Y-m-d').' 23:59:59',
        ),
        'fields' => array('UsersInterview.id','UsersInterview.users_id','Users.email','Users.family_name','Users.last_name', 'UsersInterview.scheduled'),
        'group' => array('UsersInterview.users_id','UsersInterview.id'),
        'order' => array('UsersInterview.id DESC','UsersInterview.users_id DESC'),
        'joins'=>array(
            array(
                'type'=>'left',
                'table'=>'users_interviews',
                'alias' => 'UsersInterview',
                'conditions'=>'Users.id = UsersInterview.users_id'
            ),
        ),
    ));


◉問題の発生した環境
php5.6
cakephp2系

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

サブクエリですね。
https://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#id6
これを応用できそうですね。

$db = $this->UsersInterview->getDataSource();
$subQuery = $db->buildStatement(
    array(
        'fields'     => array('"UI2"."id"'),
        'table'      => $db->fullTableName($this->UsersInterview),
        'alias'      => 'UI2',
        'limit'      => null,
        'offset'     => null,
        'joins'      => array(),
        'conditions' => 'UsersInterview.user_id = UI2.user_id AND UsersInterview.created < UI2.created',
        'order'      => null,
        'group'      => null
    ),
    $this->UsersInterview
);
$subQuery = 'NOT EXISTS (' . $subQuery . ') ';
$subQueryExpression = $db->expression($subQuery);

$conditions[] = $subQueryExpression;

$this->UsersInterview->find('all', compact('conditions'));

こんなんで出来るのかな・・・
これだったら、SQLを直接書いた方が優しい感じがします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/08 17:57

    同じテーブルです!
    ちなみに下記記事を参照しました。
    http://labs.timedia.co.jp/2014/10/selecting-max-record-in-group-by.html

    キャンセル

  • 2017/03/08 18:42 編集

    無理しないで、直接SQL実行すればいいんじゃないですか?
    http://blog.cyz.jp/1759/
    おっと、質問内容に反しますね。無視してください。

    キャンセル

  • 2017/03/09 16:15

    誠にありがとうございます!!!
    いえいえ直接SQL実行する方法もあると知って、勉強になりました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • SQL文をcake php2系に変換した場合のコードが知りたい(該当レコード以外により大きいレコードがない場合の値をfindで取得方法)