Имя идентификатора слишком длинное Zend Framework 2 - PullRequest
0 голосов
/ 27 сентября 2019

Я пишу 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;
...