ZendFramework SQL - MAX и MIN в JOIN

No48

Новичок
Доброго времени суток.

Господа, подскажите, как правильно реализовать на Zend 1.11 такой запрос:

SQL:
SELECT c.id, MAX(p.price) as max_price, MIN(p.price) as min_price
FROM catalog AS c
LEFT JOIN catalog_products AS p
    ON p.parent = c.id
WHERE (c.url_key = 'url')
AND (c.is_public = '1')
AND (p.price > 0)
LIMIT 1
Вот такая реализация вызывает ошибку в методе joinLeft.

PHP:
$this->setTable( 'catalog' );
$Select = $this->select();
$Select->from( array( 'c' => $this->_name ), $Engine->getFrontendColumns( array( 'prefix' => 'c' ) ) );

$Select->joinLeft( array(
    'p' => $this->getTable('catalog_products'),
), 'c.id = p.parent', array(
    'MAX(price) as max_price',
    'MIN(price) as min_price'
));

$Select->where( 'c.url_key = ?', $urlKey );
$Select->where( 'c.is_public = ?', '1' );
$Select->where( 'p.price > ?', '0' );
$Select->limit( 1 );
$Result = $this->fetchRow( $Select );
Заранее благодарю за помощь.
 

WMix

герр M:)ller
Партнер клуба
Код:
$Select->joinLeft(
    ['p' => 'catalog_products'],
    'c.id = p.parent',
    [
        'MAX(p.price) as max_price',
        'MIN(p.price) as min_price'
    ]
);
но запрос ошибочный, не понятно по какому полю группировка
 

No48

Новичок
Там группировать нечего: url_key - уникальное значение и всегда возвращается только 1 строка...
Но ради чистоты эксперимента добавил $Select->group( 'c.id' )

Результат не изменился. Ни с моим кодам, ни с вашим.
Все равно благодарю за попытку помочь. :)
 

No48

Новичок
В общем пришлось изобретать велосипед.
Работающее решение (но не изящно - мне реализация не очень нравится):
PHP:
$col = $Engine->getFrontendColumns( ['prefix' => 'c'] );
$col['max_price'] = 'MAX(p.price)';
$col['min_price'] = 'MIN(p.price)';

$this->setTable( 'catalog' );
$Select = $this->select();
$Select->from( ['c' => $this->_name], $col );

$Select->joinLeft( ['p' => 'catalog_products'], 'c.id = p.parent', [] );
      
$Select->where( 'p.price > ?', '0' );
$Select->where( 'c.url_key = ?', $urlKey );
$Select->where( 'c.is_public = ?', '1' );

$Select->group( 'c.id' );
$Select->limit( 1 );

$Result = $this->fetchRow( $Select );
Всем спасибо за участие. Если есть предложения или замечания - буду благодарен.
 
Сверху