sql >> データベース >  >> RDS >> Mysql

PHQL WHERE xxx IN()は1つのデータしか取得できません

    PDOとPHQLの両方で動作する例はほとんどないため、こちら およびこちら これはあなたの例にぴったりですが、PhalconqueryBuilderメカニズムで可能なもう1つのアプローチがあります。

    $builder = $this->modelsManager->createBuilder();
    $builder->addFrom('Application\Entities\KeywordsTrafficReal', 'tr')
            ->leftJoin('Application\Entities\Keywords', 'kw.id = tr.keyword_id', 'kw')
            ->inWhere('keyword_id', self::$keywords) // <<< it is an array!
            ->betweenWhere('traffic_date', self::$daterange['from'], self::$daterange['to']);
    

    inWhere メソッドは、私が知る限り、queryBuilderを介してのみ到達可能であり、前述のPDOの例IN (?, ?, ?)とまったく同じように機能します。 。ただし、手動で実装する必要はありません。

    PHQLの作成の一部をスキップして、SQLクエリを直接作成することもできますが、独自の検証を行うコストがかかります。

    $realModel = new KeywordsTrafficReal();
    
    $sql = sprintf('SELECT * '
                .  'FROM keywords_traffic_real tr '
                .  'LEFT JOIN keywords kw '
                .  'ON kw.id = tr.keyword_id '
                .  'WHERE tr.keyword_id IN(%s) '
                .  "AND traffic_date BETWEEN '%s' AND '%s' ",
            join(',', self::$keywords), self::$daterange['from'], self::$daterange['to']);
    
    $results = new \Phalcon\Mvc\Model\Resultset\Simple(null, $realModel, $realModel->getReadConnection()->query($sql));
    



    1. GoogleAppsScript上のJDBC。例外:タイムアウトまたはクライアント要求のためにステートメントがキャンセルされました

    2. 既存のMySQLデータベースからSQLAlchemy宣言型クラス定義をリバースエンジニアリングしますか?

    3. PostgreSQLでデータベースのサイズを取得する2つの方法

    4. MySQL。リレーショナルテーブルの主キー。一意のIDまたは複数の一意のキー?