2012-08-29 20 views

Odpowiedz

3

Z Zend_Db_Select nie można zrobić to w piękny sposób, więc proponuję użyć prostego zapytania:

$q = "WITH t ..." 
$db->fetchAll($q); 
0

I quote-

Korzystanie Zend_Db_Select nie jest obowiązkowe. W przypadku bardzo prostych zapytań SELECT, zwykle łatwiej jest podać całe zapytanie SQL jako ciąg, a następnie wykonać je przy użyciu metod adapterów, takich jak query() lub fetchAll(). Korzystanie z funkcji Zend_Db_Select jest przydatne, jeśli chcesz złożyć zapytanie SELECT proceduralnie lub w oparciu o logikę warunkową w aplikacji.

Więc można spróbować tego

$wthselect = 'WITH t AS 
      (SELECT item_id, row_number() OVER (ORDER BY some_criteria DESC) rn 
       FROM orders) 
     SELECT t2.rn, t2.item_id 
      FROM t t1 JOIN t t2 ON (t2.rn > t1.rn) 
      WHERE t1.item_id = 145'; 

$stmt = $select->query($wthselect); 
$result = $stmt->fetchAll(); 
0

Zend_Db_Select jest przydatna, jeśli zapytanie jest trochę skomplikowane, o parametrach i logiki zawarte w aplikacji, jak już notowane na inną odpowiedź. Sprawdź ten link na stronie official Zend Framework, aby uzyskać dokładniejszy opis tej insuliny.

Sprawdź również this useful link od społeczności Zend Framework, szczególnie this post. Wyraźnie widać, że w przypadku małych i nieskomplikowanych zapytań, takich jak ten, który wysłałeś, łatwiej jest użyć instrukcji fetchAll() lub .

Tak, moja rada, użyj fetchAll() lub query() dla twojej sprawy.