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

Zend \ Db:サブクエリから選択

    編集 :実際、クエリに欠陥があることがわかりました。 MySQLでは期待どおりに機能しません。つまり、特殊なクエリを作成する必要があります。 GROUP_CONCAT change GROUPBYorder をご覧ください。

    Zend\Db\Sql\Selectのコードを確認した後 私はこれらの行を見つけました:

    if ($table instanceof Select) {
        $table = '(' . $this->processSubselect($table, $platform, $driver, $parameterContainer) . ')';
    } else {
        $table = $platform->quoteIdentifier($table);
    }
    

    したがって、答えは実際には非常に単純です。私がしなければならなかったのは、Zend\Db\Sql\Selectを提供することだけでした。 from()へのオブジェクト 、Zend\Db\Sql\Expressionでラップせずに ZF1で使っていたように。

    コード例:

    $adapter = $this->getAdapter(); // Returns Zend\Db\Adapter\Adapter
    $sql = new Zend\Db\Sql\Sql($adapter);
    
    $from = $sql->select()
        ->from(static::$table)
        ->columns(array(
            'full_name',
            'value',
        ))
        ->order('id DESC');
    
    $select = $sql->select()
        ->from(array(
            'subtable' => $from,
        ))
        ->columns(array(
            'full_name' => 'full_name',
            'value' => new Expression('GROUP_CONCAT(value)'),
        ))
        ->group('full_name')
        ->order('full_name DESC');
    
    $selectString = $sql->getSqlStringForSqlObject($select);
    
    $resultSet = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
    
    return $resultSet->toArray();
    



    1. 私のお気に入りのPostgreSQL拡張機能-パート2-

    2. python-Djangoを使用してUnicode文字をMySQLに保存する際の問題

    3. マルチクラウド環境全体でのPostgreSQLセキュリティの標準化

    4. MySQLGroupByで最新の結果を表示