public function getListOrderedByDistance($userIdList, $first, $count, $lat, $lon) { return $this->locationDao->getListOrderedByDistance($userIdList, $first, $count, $lat, $lon); }
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)); }