728x90
'최근 본 상품' 화면을 쿠키로 개발하다가 상품 노출까지는 구현했지만 정렬이 되지않아 하루를 고민해서 찾은 내용이다.
ORDER BY INSTR('1, 2, 3') DESC
↑핵심 코드
처음 개발한 순서는 이렇다.
① 상품 ID(key)값을 쿠키에 저장한다.
- 상품 상세화면으로 이동할 때 java단에서 구현함.(controller, service)
② 쿠키에 저장한 ID값을 가져온 후 mybatis쿼리에 파라미터로 data를 전달한다.
- 이때 해당 쿼리는 아래와 같았다.
//mybatis (xml)
<select id="getGoods" parameterType="java.util.list" resultMap="map">
SELECT *
FROM GOODS
WHERE
GOODS_ID IN(
<foreach collection="list" item="item" separator=",">
#{item.goodsId}
</foreach>
)
</select>
↑
//실행됐을 때 쿼리
SELECT *
FROM GOODS
WHERE
GOODS_ID IN( '1', '2', '3' )
이 방식의 문제는 해당 데이터를 가지고 jsp에서 jstl foreach문으로 상품을 구현할 때 최근 본 순으로 조회되지 않았다.
그래서 변경한 쿼리는 이러하다
//mybatis (xml)
<select id="getGoods" parameterType="파라미터맵_사용" resultMap="map">
SELECT *
FROM GOODS
WHERE
GOODS_ID IN(
<foreach collection="list" item="item" separator=",">
#{item.goodsId}
</foreach>
)
ORDER BY INSTR(
#{orderByGoodsId},
GOODS_ID
) DESC
</select>
↑
//실행됐을 때 쿼리
SELECT *
FROM GOODS
WHERE
GOODS_ID IN( '1', '2', '3' )
ORDER BY INSTR('1, 2, 3') DESC
이렇게 변경하면 최근 본 상품을 파라미터로 전달할 때 순서만 맞춰주면 정렬된 데이터를 가져올 수 있다.
728x90
'DataBase > Oracle' 카테고리의 다른 글
Oracle ] ANSI Join과 ORACLE Join (0) | 2022.02.08 |
---|---|
시퀀스(Sequence) NEXTVAL 과 MAX+1의 사용방법 및 차이 (0) | 2021.12.01 |
데이터활용 ] 시작 및 종료 날짜 데이터 중복체크 하는 방법 (0) | 2020.06.19 |