sql >> Databasteknik >  >> RDS >> Mysql

Zend\Db:Välj från underfråga

REDIGERA :Jag ser faktiskt nu att min fråga var felaktig. Det kommer inte att fungera som förväntat med MySQL, vilket innebär att jag fortfarande måste skriva specialiserade frågor. Se GROUP_CONCAT ändra GROUP BY order

Efter att ha gått igenom koden för Zend\Db\Sql\Select Jag hittade dessa rader:

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

Så svaret är faktiskt ganska enkelt, allt jag behövde göra var att tillhandahålla en Zend\Db\Sql\Select objekt till from() , utan att slå in den i en Zend\Db\Sql\Expression som jag brukade med ZF1.

Kodexempel:

$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. Mysql2::Fel:Åtkomst nekad för användaren 'test'@'localhost' till databasen 'depot_test'

  2. Ta bort ett databaspostkonto från en profil (SSMS)

  3. Använd MySQL relationsdatabaser på Ubuntu 8.04 (Hardy)

  4. Tomma filer genererade från att köra `mysqldump` med PHP