Mysql
 sql >> база данни >  >> RDS >> Mysql

Zend\Db:Изберете от подзаявка

РЕДАКТИРАНЕ :Всъщност сега виждам, че заявката ми е била погрешна. Няма да работи както се очаква с MySQL, което означава, че все още трябва да пиша специализирани заявки. Вижте GROUP_CONCAT промяна GROUP BY поръчка

След преминаване през кода на 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ефективност на кеша на заявки

  2. Вмъкнати, изтрити таблици (магически таблици) в MySQL

  3. Присъединява се към MySQL за извличане на данни от множество таблици

  4. Йерархия много към много с множество родители - PHP, MySQL

  5. Пребройте редовете в MySQL заедно с действителното съдържание на редовете