组前的Zend框架顺序

时间:2012-04-28 13:22:47

标签: mysql sorting zend-framework group-by

任何人都有一个例子如何在zend paginator adapter中使用左连接的组之前订购?

new Zend_Paginator_Adapter_DbSelect($this->db->select()
->from(array( 'a' => $this->prefix.'contest' ), array('id'))
->joinLeft(array( 'b' => $this->prefix.'logo_to_contest'),'a.id=b.contest_id', array('img'))
->group('a.id')
->order('a.end','a.date_start DESC','b.id RAND()')
)

1 个答案:

答案 0 :(得分:2)

来自mysql manuel

  

一般而言,使用的条款必须完全按照中所示的顺序给出   语法描述。例如,必须使用HAVING子句   任何GROUP BY子句和任何ORDER BY子句之前。例外是   INTO子句可以如语法中所示出现   描述或紧跟在select_expr列表之后。

并且syntax description组在订单之前出现,因此它与zend无关 它的mysql要求你在订购之前放置组。

但是,为了在订购后解决此问题和组,您可以选择带有订单的子查询,然后在新的选择上进行分组,如:

$subselect = $db->select()
->from(array( 'a' => $this->prefix.'contest' ), array('id'))
->joinLeft(array( 'b' => $this->prefix.'logo_to_contest'),'a.id=b.contest_id', array())
->order('a.end','a.date_start DESC','b.id RAND()');

$select = $db->select()->from(a(array( 'a' => $this->prefix.'contest' ), array('id'))
->joinLeft(array( 'b' => $this->prefix.'logo_to_contest'),'a.id=b.contest_id', array('img'))
->where("a.id in ($subselect)")
->group('a.id');