Reputation: 175
I try to sort column quality
with $query->orderBy('numbers.quality', 'asc');
in subquery but it not working. Any workaround?
Note: For some reason i don't want to use join.
$model = NumberUpload::query();
if (!empty($request['domain'])) {
$model->whereIn('domain_id', $request['domain']);
}
$model->whereIn('phone', function($query) use ($request){
$query->select('phone')->from('numbers')->whereNull('numbers.client_group_id')->whereNotIn('id', function($query) use ($request){
$query->select('number_push_logs.number_id')->from('number_push_logs')->where('number_push_logs.client_group_id',$request['client_group']);
});
if (!empty($request['min_quality'])) {
$query->where('numbers.quality', '>=', $request['min_quality']);
}
if (!empty($request['max_quality'])) {
$query->where('numbers.quality', '<=', $request['max_quality']);
}
if (!empty($request['number_type'])) {
$query->whereIn('numbers.number_type_id', $request['number_type']);
}
if (!empty($request['contact_status'])) {
$query->where('numbers.contact_status_id', $request['contact_status']);
}
$query->orderBy('numbers.quality', 'asc');
})->limit(5);
This the sql query output:
MySQL query:
select * from `number_uploads` where `domain_id` in (?, ?, ?, ?, ?, ?) and `phone` in (
select `phone` from `numbers` where `numbers`.`client_group_id` is null and `id` not in (
select `number_push_logs`.`number_id` from `number_push_logs` where `number_push_logs`.`client_group_id` = ?
) order by `numbers`.`quality` asc
) limit 5
Current output:
phone quality
82187****** 5
82187****** 2
82187****** 3
82187****** 1
82187****** 4
Expected output:
phone quality
82187****** 1
82187****** 2
82187****** 3
82187****** 4
82187****** 5
Upvotes: 1
Views: 338
Reputation: 49375
Your query must in sql looks like this, if you want to keep the order
select * from `number_uploads`
INNER JOIN (
select `phone`,`quality` from `numbers` where `numbers`.`client_group_id` is null and `id` not in (
select `number_push_logs`.`number_id` from `number_push_logs` where `number_push_logs`.`client_group_id` = '?'
)) numbers ON `number_uploads`.`phone` = numbers.`phone`
where `domain_id` in (?,?,?,?,?)
order by `numbers`.`quality`
limit 5
Upvotes: 2