2013-07-09 7 views
0

После обновления с Zend 1.12.1 по номеру 1.12.3 и поверением x_debug on и изготовлением OLD_PASSWORDdefault.Исключение Zend_Db PDO возникает при представлении mySQL?

Я перезапускать программу, которая используется для запуска и легко, и теперь он имеет фатальную PDOException, ниже:

Ошибка:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'place_fcb.userid' in 'group statement' 

Actual SQl Запрос:

SELECT `C`.* 
FROM (SELECT `place_fcb`.* FROM `place_fcb`) 
AS `C` 
WHERE (place_type_id != '176') 
GROUP BY place_fcb.userid 
HAVING (place_fcb.pda >= '2009-12-21') 
AND (place_fcb.pda <= '2010-01-20') 

Zend_Db_Table_Abstract :

public function getPlacefcb($start_date = '', $end_date = '', $r_id = '') 
    { 
     $sub_sql = $this->select()->from('place_fcb'); 

     $select = $this->select() 
      ->setIntegrityCheck(false) 
      ->from(array('C' => new Zend_Db_Expr('('.$sub_sql.')'))) 
      ->where("place_type_id != '176'") 
      ->group('place_fcb.userid'); 

     if($start_date != '') 
      $select->having('`place_fcb`.`pda` >= ?', $start_date); 

     if($end_date != '') 
      $select->having('`place_fcb`.`pda` <= ?', $end_date); 

     if($region_id != '') 
      $select->having('`place_fcb`.`r_id` = ?', $r_id); 

     return $rowset = $this->fetchAll($select); 
    } 

MySQL of place_fcb:

place_fcb - это ПРОСМОТР, а не таблица. Он имеет следующие соответствующие поля

place_id 
r_id 
place_type_id 
pda 
userid 

я могу удалить исключение и возвращать те же результаты, изменяя заявление Sql для:

SELECT `C`.* 
    FROM (SELECT `place_fcb`.* FROM `place_fcb`) 
    AS `C` 
    WHERE (place_type_id != '176') 
    GROUP BY userid 
    HAVING (pda >= '2009-12-21') 
    AND (pda <= '2010-01-20') 

т.е.. удалив все суффиксы таблицы ...

но как я могу исправить это с помощью Zend? и почему это происходит неправильно?

не

ответ

1

Почему ваш запрос использовать подзапрос:

->from(array('C' => new Zend_Db_Expr('('.$sub_sql.')'))) 

Вместо того, чтобы просто:

->from('place_fcb') 

С первым, нет place_fcb таблицы во внешнем запросе; следовательно, так квалифицированные ссылки терпят неудачу (и всегда были бы, поэтому я не вижу, как он работал для вас до этого обновления).

Если вы настаиваете на сохранении подзапроса, вы можете переименовать псевдоним подзапроса от 'C' до 'place_fcb', хотя это может вызвать путаницу в долгосрочной перспективе; лучше переименовать квалифицированные ссылки от 'place_fcb' до 'C'.

+0

Вы совершенно правы и на производственной версии, которую использовали: '-> from (array ('place_fcb' => новый Zend_Db_Expr ('('. $ Sub_sql. ')')))' ..... Было бы лучше всего изменить это на просто '-> from (place_fcb)' – surfer190

+0

@StevieG: до тех пор, пока подзапрос останется неизменным, я бы действительно полностью его удалил и заменил. – eggyal