Я пишу SQL-запрос, используя Zend Framework 2 уровень абстракции базы данных, включающий подзапрос с объединением, но это приводит к следующей ошибке:
Statement could not be executed (42000 - 1059 - Identifier name '(select article_id a,GROUP_CONCAT(reference_data SEPARATOR '#') r from article_ref_data GROUP BY a)' is too long)
Мой коддо сих пор:
$ref_data = "(select article_id a,GROUP_CONCAT(reference_data SEPARATOR '#') r from article_ref_data GROUP BY a)";
$adapter = new \Zend\Db\Adapter\Adapter ( $db );
$sql = new Sql ( $adapter );
$select = $sql->select ()->columns (array('article_id', 'article_doi','title', 'first_page', 'last_page', 'pages',
'print_publish_date'=>new Expression('DATE_FORMAT (print_publish_date, \'%d-%m-%Y\')'),
'online_publish_date'=>new Expression('DATE_FORMAT (online_publish_date, \'%d-%m-%Y\')'),
'received_date'=>new Expression('DATE_FORMAT (received_date, \'%d-%m-%Y\')'),
'accepted_date'=>new Expression('DATE_FORMAT (accepted_date, \'%d-%m-%Y\')'),
'total_view'));
$select->from ( array ('a' => 'article') );
$select->join ( array ('j' => 'journal'),'j.journal_id = a.journal_id',array ('journal_code'), 'left' );
$select->join ( array ('v' => 'volume'),'v.volume_id = a.volume_id', array ('volume_no'), 'left' );
$select->join ( array ('i' => 'issue'), 'i.issue_id = a.issue_id', array ('number', 'issue_title'), 'left' );
$select->join ( array ('rat' => 'ref_article_type'),'rat.article_type_id = a.article_type_id', array ('article_type'), 'left' );
$select->join ( array ('ras' => 'ref_article_status'),'ras.article_status_id = a.article_status_id', array ('article_status_name'), 'left' );
$select->join ( array ('ref_at' => 'ref_access_type'),'ref_at.access_type_id = a.access_type_id', array ('access_type'), 'left' );
$select->join ( array ('ref_lt' => 'ref_license_type'), 'ref_lt.license_type_id = a.license_type_id', array ('license_type'), 'left' );
$select->join (array ('ard' => $ref_data), 'ard.article_id = a.article_id', array ('ref'), 'left' );
$select->where ( array ('a.journal_id = ?' => $journal_id) );
$statement = $sql->prepareStatementForSqlObject ( $select );
$sql_result = $statement->execute ();
$results = new ResultSet ();
$results = $results->initialize ( $sql_result )->toArray ();
return $results;