在用户查询时,有时候有需要把“同城”,“同行”等相关度教高的用户排在前面的需求。
而使用sql的排序可以简单的实现这个需求,但也有不全面的地方。
//根据同乡同行排序
$data = $userModel->with(['hometown','trade','city'])->orderByRaw("ABS({$self->trade_id}
- trade_id) + ABS({$self->hometown_id} - hometown_id) + ABS({$self->city_id} - city_id)")
->orderBy('info_rate','DESC')->paginate($limit,$this->field);
思路如上所示(代码是laravel的orm语法):
以用户与被查询用户的行业id , 城市id等之间id的差的绝对值作为 orderBy的字段。