任何人都有一个例子如何在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()')
)
答案 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');