본문 바로가기

Database/Mysql & MyBatis

페이징과 랭킹, Total Count 조회하기

1. 페이징

LIMIT 3 OFFSET ? 을 통해 데이터 3개씩 조회하도록 페이징할 수 있다.

 

2. 랭킹

DENSE_RANK() OVER (ORDER BY t1.score DESC) AS rank 으로 점수로 랭킹을 조회할 수 있도록 하였다.

만약 동점인 점수가 있다면 같은 랭크로 조회된다

 

3. Total Count

(SELECT @totalCount := (SELECT COUNT(id) FROM game_title WHERE publicity = 1)) AS T으로 

서브쿼리를 추가하여 전체 카운트를 조회하도록 하였다.

 

참고로 CONVERT(t1.image USING UTF8) AS imgsrc의 경우 imgsrc가 LONGBLOB 타입으로 되어있어

CONVERT( ~ USING UTF8)으로 감싸줘야한다. 만약 그냥 조회하게 되면 데이터가 변환되지 않아 BLOB으로 조회된다.

SELECT 
	t3.*, CONVERT(@totalCount USING UTF8) as totalCount FROM (
	SELECT 
	        t1.*,
	        t2.username,
	    	CONVERT(t1.image USING UTF8) AS imgsrc,
	    	DENSE_RANK() OVER (ORDER BY t1.score DESC) AS rank
	    FROM 
	        game_title t1
	    LEFT JOIN 
	        userTable t2 ON t1.creator = t2.email
	    WHERE 
	        t1.publicity = 1
	    ORDER BY 
	        t1.score DESC
) AS t3,
(SELECT @totalCount := (SELECT COUNT(id) FROM game_title WHERE publicity = 1)) AS T
LIMIT 3 OFFSET ?;

'Database > Mysql & MyBatis' 카테고리의 다른 글

Illegal mix of collations  (0) 2024.09.17
MyBatis 프로시저 생성하기  (0) 2024.09.15
[centos7] MariaDB 설치 및 DBeaver연결  (0) 2023.07.29