>  Q&A  >  본문

Laravel은 특별 가격 조건에 따라 가격별로 정렬합니다.

다음 열(가격, 특별 행사, 할인 여부)이 포함된 테이블이 있습니다.

으아악

제품을 '가격' 기준으로 정렬하고 싶은데 'is_special' 열이 true인 경우 'special_price' 열을 선택하세요.

저는 다음과 같은 결과를 원합니다.

으아악

원시 SQL에서는 다음과 같습니다.

으아악

저는 Laravel을 사용하고 있으며 쿼리 빌더를 정렬하고 결과를 얻고 싶습니다.

예를 들어 가상 속성을 사용하여 이 작업을 수행했습니다

으아악

그런 다음 컬렉션이 정렬되었지만$products->sortBy('current_price'), 이번에는 결과에 쿼리 빌더를 가져오고 싶습니다. 쿼리 작성기는 가상 속성을 사용할 수 없습니다.

'가격'과 '수량' 두 열을 기준으로 다중 정렬을 시도했습니다

으아악

'수량'과 '가격'이라는 두 가지 필터가 있습니다.

다중 정렬에서는 제품을 가격순으로 정렬한 다음 모든 제품을 '수량'순으로 정렬하고 싶습니다. 수량 == 0인 제품은 수량 > 0인 모든 제품을 따라야 합니다.

도와주세요.

P粉030479054P粉030479054363일 전1057

모든 응답(1)나는 대답할 것이다

  • P粉207969787

    P粉2079697872023-09-23 10:17:23

    첫 번째 질문

    쿼리 빌더에는 접근자가 없으므로 선택해야 합니다.

    으아악

    PS: 데이터베이스에서 정렬하는 것이 좋습니다. 제품에 paginate가 있는 경우 반환된 페이지 데이터만 정렬된다는 점을 고려하세요.


    두 번째 질문:

    1. qty > 0 AS 1,qty = 0 AS 0, 내림차순으로 정렬:

    2. 요청순으로 정렬 price

    3. 요청순으로 정렬 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')

    SQL 주입🎜에 취약합니다. 로 변경하세요. orderBy(DB::raw("IF(is_special=0, 가격, 특별 가격)"), request('price', 'ASC'))🎜

    회신하다
    0
  • 취소회신하다