2016-09-21 3 views
0

Я получаю проблему синтаксиса sql в подзапросе zf2. Я не знаю, что случилось с моим запросом. мой запрос отлично работает на MySQLzf2 - проблема с подзапросом в модели

в Зенд он показывает ошибка синтаксиса

SQLQuery

SELECT (SELECT role_name FROM roles WHERE role_id=(SELECT role_id FROM users WHERE id=a.user_id)) AS role,`a`.consultant_id,`a`.*, `c`.`name` AS `name`, `b`.`name` AS `branchname`, `u`.`name` AS `consultantname`, `u`.`role_id` AS `role_id`, `r`.`role_name` AS `rolename` 
      FROM `agents` AS `a` 
      LEFT JOIN `countries` AS `c` ON `c`.`code` = `a`.`country` 
      LEFT JOIN `branches` AS `b` ON `b`.`id` = `a`.`branch_id` 
      INNER JOIN `users` AS `u` ON `u`.`id` = `a`.`consultant_id` 
      INNER JOIN `roles` AS `r` ON `r`.`role_id` = `u`.`role_id` 
    WHERE r.`role_id` IN(5,12,21,25,43,44) AND a.branch_id=63 AND a.consultant_id =2834 
    ORDER BY `a`.`id` ASC 

Zend Query

 $rolesSelect = new Select(); 
     $rolesSelect->from(array('r1' => 'roles')); 
     $rolesSelect->columns(array('ro_name'=>'role_name')); 
     $rolesSelect->join(array('u1' =>'users'), 'u1.role_id = r1.role_id', array('')); 
     $rolesSelect->join(array('a1' =>'agents'), 'u1.id = a1.user_id', array('')); 

     $select = new Select(); 
     $select->from(array('a' => 'agents')); 
     $select->columns(array('*','role_name1' => new Expression('?', array($rolesSelect)))); 
     $select->where($conditions); 
     $select->join(array('c' =>'countries'), 'c.code = a.country', array('name'),'left'); 
     $select->join(array('b' =>'branches'), 'b.id = a.branch_id', array('branchname'=>'name'),'left'); 
     $select->join(array('u' =>'users'), 'u.id = a.consultant_id', array('consultantname'=>'name','role_id'=>'role_id')); 
     $select->join(array('r' =>'roles'), 'r.role_id = u.role_id', array('')); 
     $select->order('a.id ASC'); 
     $resultSet = $this->tableGateway->selectWith($select); 
     echo $conditions."<pre>"; 
     print_r($resultSet); 
     die; 
     return $resultSet->buffer(); 
+0

Заявление не может быть выполнено (42000 - 1064 - У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'AS' 'FROM' agents' AS 'a' LEFT JOIN 'countries'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' .'cou 'в строке 1) –

+0

Я уверен, что мой mysqlquery работает нормально, но в zend я не могу поместиться –

+0

да, я пишу в файле модели –

ответ

0

вы можете использовать ZEND выражение вместо см ниже пример

$select = new Select(); 
      $select->from(array('a' => 'agents')); 
      $select->columns(array('*','consultantname' => new \Zend\Db\Sql\Expression('(SELECT u.name FROM users u WHERE u.id = a.consultant_id)'))); 
      $select->where($conditions); 
      $select->join(array('u' =>'users'), 'u.id = a.user_id', array()); 
      $select->join(array('c' =>'countries'), 'c.code = a.country', array('name'),'left'); 
      $select->join(array('b' =>'branches'), 'b.id = a.branch_id', array('branchname'=>'name'),'left'); 
      $select->join(array('r' =>'roles'), 'r.role_id = u.role_ref_id', array('role_name')); 
      $select->order('a.id ASC'); 
      $resultSet = $this->tableGateway->selectWith($select); 
      //echo "<pre>";print_r($resultSet);die; 
      return $resultSet->buffer(); 

 Смежные вопросы

  • Нет связанных вопросов^_^