다음 열(가격, 특별 행사, 할인 여부)이 포함된 테이블이 있습니다.
으아악제품을 '가격' 기준으로 정렬하고 싶은데 'is_special' 열이 true인 경우 'special_price' 열을 선택하세요.
저는 다음과 같은 결과를 원합니다.
으아악원시 SQL에서는 다음과 같습니다.
으아악저는 Laravel을 사용하고 있으며 쿼리 빌더를 정렬하고 결과를 얻고 싶습니다.
예를 들어 가상 속성을 사용하여 이 작업을 수행했습니다
으아악그런 다음 컬렉션이 정렬되었지만$products->sortBy('current_price')
, 이번에는 결과에 쿼리 빌더를 가져오고 싶습니다.
쿼리 작성기는 가상 속성을 사용할 수 없습니다.
'가격'과 '수량' 두 열을 기준으로 다중 정렬을 시도했습니다
으아악'수량'과 '가격'이라는 두 가지 필터가 있습니다.
다중 정렬에서는 제품을 가격순으로 정렬한 다음 모든 제품을 '수량'순으로 정렬하고 싶습니다. 수량 == 0인 제품은 수량 > 0인 모든 제품을 따라야 합니다.
도와주세요.
P粉2079697872023-09-23 10:17:23
쿼리 빌더에는 접근자가 없으므로 선택해야 합니다.
으아악PS: 데이터베이스에서 정렬하는 것이 좋습니다. 제품에 paginate
가 있는 경우 반환된 페이지 데이터만 정렬된다는 점을 고려하세요.
qty > 0
AS 1,qty = 0
AS 0, 내림차순으로 정렬:
요청순으로 정렬 price
요청순으로 정렬 qty
그러므로 제품은 qty = 0
앞에 qty > 0
을 넣은 다음 qty > 0
의 레코드를 가격별로 정렬합니다. 모든 제품은 qty > 0
放在qty = 0
之前,然后将qty > 0
的记录按照价格排序,然后所有产品按照qty
排序;qty = 0
的记录将按照价格排序,然后所有产品也按照qty
기준으로 정렬됩니다. qty = 0
인 레코드는 가격 기준으로 정렬되며, 모든 제품은
기준으로 정렬됩니다.
으아악
PSorderByRaw("if(is_special=0, price, special_price) " . request('price', 'ASC')
容易受到SQL注入的攻击。改为orderBy(DB::raw("IF(is_special=0, price, special_price)"), request('price', 'ASC'))
:orderByRaw("if(is_special=0, 가격, 특별 가격) " . request('price', 'ASC')
는
로 변경하세요. orderBy(DB::raw("IF(is_special=0, 가격, 특별 가격)"), request('price', 'ASC'))
🎜