EAT PLACE - 별점 기능 구현

 별점 기능 구현?

 맛집 사이트라면 당연하게 별점 기능이 있어야 한다. 식당 평가의 큰 비중을 차지하는 기능이라고 생각했기 때문이다.

이를 구현하기 위해 식당 테이블과 리뷰(평가) 테이블에 각각 별점 컬럼을 추가했다. 

etc-image-0
eat place DB table

기본적으로 사용자가 리뷰를 작성하면 리뷰 테이블에 별점이 각각 저장되고, 저장 될때마다 별점을 평균을 내서 

식당 테이블의 별점 컬럼에 업데이트하게 만들었다.

<리뷰를 저장하기 위한 코드>

1
2
3
4
5
6
7
8
9
10
11
ReviewVO rvo= new ReviewVO();
            rvo.setId(mvo.getId());
            rvo.setRseq(rseq);
            rvo.setContent(request.getParameter("content"));
            rvo.setRating1(Integer.parseInt(request.getParameter("rating1")));
            //rating1 이 별점 저장용 컬럼이다
            ReviewDao rdao = ReviewDao.getInstance();
            ArrayList<ReviewVO> list = rdao.listReview();
            request.setAttribute("reviewList", list);
            
            rdao.insertReview(rvo);
cs

 

<별점 평균을 내기위한  코드>

1
2
3
4
5
//rating1 avg
        int count= rvdao.getAllCount(rseq);
        int avg= rvdao.getAvg(rseq);
        request.setAttribute("average", avg);
        rdao.pushRating(avg, rseq);
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public int getAvg(int rseq) {
        int avg = 0;
        String sql = "select avg(rating1) as avg from review where rseq=?";
        con = Dbman.getConnection();
        try {
            pstmt = con.prepareStatement(sql);
            pstmt.setInt(1, rseq);
            rs = pstmt.executeQuery();
            if(rs.next())
                avg = rs.getInt("avg");
        } catch (SQLException e) {e.printStackTrace();
        } finally {
            Dbman.close(con, pstmt, rs);
        }
        return avg;
    }
cs

평균을 내는 것은 어렵지 않게 가능했다. sql 내장함수인 avg(컬럼명)을 이용해 식당별로(rseq - 식당 공유번호)

저장된 별점을 평균으로 만들었다. 

반응형