Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zend\Db:Wybierz z podzapytania

EDYTUJ :Właściwie teraz widzę, że moje zapytanie było błędne. Nie będzie działać zgodnie z oczekiwaniami z MySQL, co oznacza, że ​​nadal muszę pisać specjalistyczne zapytania. Zobacz GROUP_CONCAT zmiana kolejności GROUP BY

Po przejściu przez kod Zend\Db\Sql\Select Znalazłem te linie:

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

Tak więc odpowiedź jest właściwie dość prosta, wszystko, co musiałem zrobić, to dostarczyć Zend\Db\Sql\Select obiekt do from() , bez umieszczania go w Zend\Db\Sql\Expression tak jak kiedyś z ZF1.

Przykład kodu:

$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. Jakie są realne warstwy abstrakcji bazy danych dla Pythona?

  2. Najnowsza data i godzina z unikalnego indeksu mysql

  3. Dlaczego używanie przygotowanej instrukcji mysql jest bezpieczniejsze niż używanie typowych funkcji ucieczki?

  4. Filtruj wynik MySQL w Delphi

  5. Błąd identyfikatora zasobu #6 w PHP z MySQL