EAT PLACE - 별점 기능 구현

반응형

 별점 기능 구현?

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

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

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 - 식당 공유번호)

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

반응형