Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

acetas's avatar

How can I edit this query?

I get the correct result as in CodeA, but since I do different filters with $ query, I have to use it with $ query in a structure like CodeB. How can I do that?

CodeA

\DB::select("select tableA.*, tableB.price, tableB.diff from tableA right join(SELECT id, end_date, pro_id, price, DATEDIFF(tableB.end_date, '2021-03-08') diff FROM tableB GROUP BY id order by diff asc) tableB on tableA.id = tableB.pro_id where (date(end_date) >= '2021-03-08') group by tableA.id order by price desc");

CodeB

foreach ($sort as $_sort){
    if(in_array($_sort, array_keys(self::$allowedSortingOptions))){
        $parts = explode(' ', $_sort);

        if(count($parts) < 2){
            array_push($parts, 'desc');
        }

        list($sortField, $sortDirection) = $parts;

        if($sortField == 'price'){

            \DB::select("select tableA.*, tableB.price, tableB.diff from tableA right join(SELECT id, end_date, pro_id, price, DATEDIFF(tableB.end_date, '2021-03-08') diff FROM tableB GROUP BY id order by diff asc) tableB on tableA.id = tableB.pro_id where (date(end_date) >= '2021-03-08') group by tableA.id order by price desc");

        }else{
            $query->orderBy($sortField, $sortDirection);
        }

    }
}

$lastPage = $query->paginate($perPage, $page)->lastPage();

if($lastPage < $page){
    $page = 1;
}

return $query->paginate($perPage, $page);
0 likes
2 replies
acetas's avatar

I adapted it with what I learned from this youtube set.

https://www.youtube.com/watch?v=4yp7WGfJ5i4

Please or to participate in this conversation.