sql >> Database >  >> RDS >> Mysql

Zend\Db:Selecteer uit subquery

BEWERKEN :Eigenlijk zie ik nu dat mijn query gebrekkig was. Het zal niet werken zoals verwacht met MySQL, wat betekent dat ik nog steeds gespecialiseerde queries moet schrijven. Zie GROUP_CONCAT GROUP BY bestelling wijzigen

Na het doorlopen van de code van Zend\Db\Sql\Select Ik vond deze regels:

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

Dus het antwoord is eigenlijk heel simpel, het enige wat ik hoefde te doen was een Zend\Db\Sql\Select object tegen from() , zonder het in een Zend\Db\Sql\Expression zoals ik vroeger deed met ZF1.

Codevoorbeeld:

$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. Een getallentabel maken in MySQL

  2. linker join met lege rijen uit de rechtertabel mysql

  3. Primaire sleutel voor automatische verhoging invoegen in bestaande tabel

  4. Binaire string opslaan in MySQL