2012-02-15 2 views
0

Я пытаюсь научиться использовать объект выбора, который действительно удобен в использовании, по крайней мере, с менее сложными запросами. Существуют ли какие-либо ограничения, а не ручные SQL-запросы?zend framework select object и complex join

Я бы предпочел, чтобы использовать его везде в моем приложении, но на самом деле не знаю, как использовать его для более сложных запросов, как это:

SELECT yt.rowid, yt.concat, added_latest, yt.volume, (yt.risk*yt.volume) 
FROM obsoletes.batches yt 
INNER JOIN(
     SELECT rowid, batch, concat, volume as latest_vol, MAX(added) AS added_latest 
     FROM obsoletes.batches 
     GROUP BY concat) ss 
     ON yt.added = ss.added_latest AND yt.batch = ss.batch 
WHERE yt.concat = 'something' 
GROUP BY yt.batch 

Возможно ли это? И как? Документация не так уж велика. Могу ли я также использовать ГДЕ x IN (...) с выбранным объектом?

Заранее благодарен!

ответ

2

Не уверен, но что-то вроде этого:

$inner = $db->select() 
    ->from ('obsoletes.batches', array (
    'rowid', 
    'batch', 
    'concat', 
    new Zend_Db_Expr ('volume AS latest_vol'), 
    new Zend_Db_Expr ('MAX(added) AS added_latest') 
)) 
    ->group ('concat'); 


$query = $db->select() 
    ->from ('obsoletes.batches', array (
    'rowid', 
    'concat', 
    'volume', 
    new Zend_Db_Expr ('risk*volume') 
)) 
    ->joinInner ($inner, 'yt.added = added_latest AND yt.batch = ss.batch') 
    ->where ('concat = ?', 'something') 
    ->group ('batch');