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
TOP