Пример #1
0
 public function getListOrderedByDistance($userIdList, $first, $count, $lat, $lon)
 {
     return $this->locationDao->getListOrderedByDistance($userIdList, $first, $count, $lat, $lon);
 }
Пример #2
0
 public function getListOrderedByDistance($userIdList, $first, $count, $lat, $lon)
 {
     if (empty($userIdList)) {
         return array();
     }
     $queryParts = BOL_UserDao::getInstance()->getUserQueryFilter("user", "id", array("method" => "GOOGLELOCATION_BOL_LocationDao::getListOrderedByDistance"));
     $where = '';
     $join = ' INNER JOIN `' . GOOGLELOCATION_BOL_LocationDao::getInstance()->getTableName() . '` location ON ( user.id = location.entityId AND location.entityType = \'' . GOOGLELOCATION_BOL_LocationDao::ENTITY_TYPE_USER . '\' )';
     $sql = "SELECT `user`.* FROM `" . BOL_UserDao::getInstance()->getTableName() . "` `user`\n            {$queryParts["join"]}\n            LEFT JOIN `" . GOOGLELOCATION_BOL_LocationDao::getInstance()->getTableName() . "` location ON ( user.id = location.entityId AND location.entityType = '" . GOOGLELOCATION_BOL_LocationDao::ENTITY_TYPE_USER . "' )\n            WHERE `user`.`id` IN (" . $this->dbo->mergeInClause($userIdList) . ") {$where}\n            ORDER BY if( location.id IS NULL, 99999999999999, (\n            acos (\n                    cos ( radians(:lat) )\n                    * cos( radians( location.lat ) )\n                    * cos( radians( location.lng ) - radians(:lon) )\n                    + sin ( radians(:lat) )\n                    * sin( radians( location.lat ) )\n                ) )\n            ) ASC , `user`.`activityStamp` DESC limit :first, :count";
     return $this->dbo->queryForObjectList($sql, $this->getDtoClassName(), array('first' => $first, 'count' => $count, 'lat' => $lat, 'lon' => $lon));
 }