Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Zend\Db:Pilih dari subquery

EDIT :Sebenarnya, saya sekarang melihat bahwa permintaan saya salah. Ini tidak akan berfungsi seperti yang diharapkan dengan MySQL, yang berarti saya masih harus menulis kueri khusus. Lihat GROUP_CONCAT mengubah GROUP BY order

Setelah melalui kode Zend\Db\Sql\Select Saya menemukan baris ini:

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

Jadi jawabannya sebenarnya cukup sederhana, yang harus saya lakukan adalah memberikan Zend\Db\Sql\Select objek ke from() , tanpa membungkusnya dengan Zend\Db\Sql\Expression seperti dulu dengan ZF1.

Contoh kode:

$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. Unggah banyak gambar dengan PHP hanya menyimpan satu jalur file ke Database MySQL

  2. Mysql menghapus kata tertentu dalam string yang dipisahkan koma

  3. Gema bidang boolean sebagai ya/tidak atau nilai lainnya

  4. PHP $stmt->num_rows tidak berfungsi dengan pernyataan yang disiapkan

  5. Menautkan wadah Django dan mysql menggunakan docker-compose