Весело становится когда запрос на выборку данных у нас составляется UNION-ами, к которому простой COUNT(*) не применить толком =)
Нашёл лаконичное решение через пагинатор.
Составляем запрос
Copy Source | Copy HTML- //составляем запрос с UNION
- $selectDom = $this->select()
- ->setIntegrityCheck(false)
- ->from($this,
- array( 'id' => 'players_trans_dom.id_player', 'nik', 'id_rase',
- 'old_adr' => "CONCAT( ring, '.', old_compl, '.', old_sota)",
- 'new_adr' => "CONCAT( ring, '.', new_compl, '.', new_sota)" ))
- ->join('players_trans_dom', 'players.id = players_trans_dom.id_player', array('date' => "FROM_UNIXTIME(players_trans_dom.date , '{$dataFormat}')" ))
- ->where('players_trans_dom.date < ?', $end)
- ->where('players_trans_dom.date >= ?', $begin);
-
- $selectCol = $this->select()
- ->setIntegrityCheck(false)
- ->from($this,
- array( 'id' => 'players_trans_colony.id_player', 'nik', 'id_rase',
- 'old_adr' => "CONCAT( '4.', old_compl, '.', old_sota)",
- 'new_adr' => "CONCAT( '4.', new_compl, '.', new_sota)" ))
- ->join('players_trans_colony', 'players.id = players_trans_colony.id_player', array('date' => "FROM_UNIXTIME(players_trans_colony.date , '{$dataFormat}')" ))
- ->where('players_trans_colony.date < ?', $end)
- ->where('players_trans_colony.date >= ?', $begin);
-
- $select = $this->select()
- ->union(array($selectDom, $selectCol))
- ->order("date DESC")
- ->limit( ( $isAlliance == true || $nolimit == false ) ? $limit : 200 );
Узнаём общее количетсво итемов, которое может быть выбрано таковым запросом без лимита
Copy Source | Copy HTML- $adapter = new Zend_Paginator_Adapter_DbSelect($select);
- $count = $adapter->count();
Вот и всё. Переменная count содержит искомое число.
Комментариев нет:
Отправить комментарий