질문을 삭제하지 말아주세요.!
 
1
0
-1

안녕하세요. 라라벨 공부 중인 학생입니다!

해결 가능한 다른 기능은 추가했고 이 부분이 이해가 안되서 궁금한 점을 정리해서 질문 드립니다.ㅠ전에도 한번 질문을 드렸던 부분인데 그때는 제가 모르는게 무엇인지 모르는 상태로 한 질문이여서 제 의도가 제대로 전달되지 않은 것 같습니다.

reviews의 user_id는 users의 id를 참조합니다. 모델정의도 했습니다.

제가 궁금한 점은 reviews 테이블에서 user_id별 합계를 users 테이블에서 정렬하고 싶은데 users 테이블에는 reviews의 user_id별 합계에 해당하는 칼럼이 없어 정렬이 되지 않는데  해결하는 방법을 모르겠습니다. echo를 하여 출력하는 것이 아닌 user_id별 합계를 users 테이블에서 정렬 한 뒤 view로 보내어서 reviews가 많은 순서로 post를 출력하는 작업을 하려 하고 있습니다.

접근이 잘못된건지 아무리 찾아도 나오지 않네요..

    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1
      $re1 = DB::table('articles as re')
      ->join('users as u', 're.user_id', '=', 'u.id')
      ->selectRaw("re.user_id, COUNT('re.user_id') as total")
      ->where('re.user_id', '1')
      ->groupby('re.user_id')
      ->orderBy('total', 'desc')
      ->get();

      이렇게 한 번 해보시구요.


      혹시 위 쿼리에 문법 오류가 발생하지 않나요?

        CommentAdd your comment...
      1.  
        1
        0
        -1

        select id, review_cnt

        from users as u left join (select user_id, sum(review_cnt) as review_cnt

        from reviews

        group by user_id) as r

        on u.id = r.user_id

        order by review_cnt


        이런걸 말씀하시나요?

        1. 정창현

          네네!! 쿼리는 저도 그렇게 작성했습니다. 근데 라라벨에서 DB::raw를 사용해서 $result 변수에 저장하고 $result→orderBy('review_cnt', 'desc') 하면 결과가 나오지 않습니다.ㅠㅠㅠ

          라라벨에서 

          $re1 = User::select('*')
          ->addSelect(DB::raw("(SELECT u.id, COUNT('re.user_id') as 'total'
          FROM reviews re, user u
          WHERE u.id = re.room_id
          AND u.status = '2')")

          ) ->groupBy('re.user_id');

          $re1→orderBy('total', 'desc');

          이렇게 작성했는데 값이 안넘어갑니다

        CommentAdd your comment...