검색_상품색인_org.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. -- SELECT * FROM (
  2. SELECT DISTINCT G.GOODS_CD
  3. , IF(G.SELF_GOODS_YN = 'Y', O.OPT_CD1, G.MAIN_COLOR_CD) AS COLOR_CD
  4. , (SELECT GROUP_CONCAT(DISTINCT CONCAT(T.OPT_CD2,'|',T.SOLDOUT_YN, '|', VS.CURR_STOCK_QTY)) FROM TB_OPTION T
  5. INNER JOIN VW_STOCK VS ON T.GOODS_CD = VS.GOODS_CD
  6. AND T.OPT_CD = VS.OPT_CD
  7. WHERE T.DISP_YN = 'Y'
  8. AND T.GOODS_CD = G.GOODS_CD
  9. AND T.OPT_CD1 = O.OPT_CD1 ) AS SIZE_INFO
  10. , I.SIZE_GB
  11. , (CASE WHEN I.SIZE_GB = 'T' THEN '상의'
  12. WHEN I.SIZE_GB = 'B' THEN '하의'
  13. WHEN I.SIZE_GB = 'S' THEN '신발'
  14. ELSE '' END
  15. ) AS SIZE_GB_NM
  16. , (SELECT GROUP_CONCAT(DISTINCT CONCAT(T.OPT_CD1, '|',C.COLOR_FILE) ) FROM TB_OPTION T
  17. INNER JOIN TB_COLOR C ON T.OPT_CD1 = C.COLOR_CD
  18. WHERE T.GOODS_CD = G.GOODS_CD
  19. AND T.DISP_YN = 'Y') AS COLOR_INFO
  20. , G.GOODS_NM
  21. , G.GOODS_TNM
  22. , CONCAT(IF(IFNULL(G.GOODS_GB,'') IN ('G073_11','G073_15', ''), '',IFNULL(CONCAT('[',FN_GET_CODE_NM('G073',G.GOODS_GB),']'),'') )
  23. ,IF(G.FOREIGN_BUY_YN='Y','[해외구매대행]','' )
  24. ,IF(G.PARALLEL_IMPORT_YN = 'Y','[병행수입]','')
  25. ,IF(G.ORDER_MADE_YN='Y','[주문제작]','')
  26. ,G.GOODS_NM ) AS GOODS_FULL_NM
  27. , G.GOODS_SNM
  28. , G.BRAND_CD
  29. , (CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM ELSE BG.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
  30. , BG.BRAND_GROUP_NO
  31. , G.ITEMKIND_CD
  32. , G.FORMAL_GB
  33. , G.LIST_PRICE
  34. , G.CURR_PRICE
  35. , BP.PC_CURR_PRICE
  36. , BP.MO_CURR_PRICE
  37. , BP.APP_CURR_PRICE
  38. -- , BP.CURR_PRICE
  39. -- , 100 - ROUND((BP.CURR_PRICE / G.LIST_PRICE) * 100 ,0) AS DC_RATE
  40. , G.SELF_GOODS_YN
  41. , G.GOODS_STAT
  42. , G.PNT_PRATE
  43. , G.PRE_PPNT_USABLE_YN
  44. , G.PNT_MRATE
  45. , G.PRE_MPNT_USABLE_YN
  46. -- , (CASE WHEN 'P' /**P*/ = 'P' THEN G.PNT_PRATE ELSE G.PNT_MRATE END) AS PNT_RATE
  47. -- , (CASE WHEN 'P' /**P*/ = 'P' THEN G.PRE_PPNT_USABLE_YN ELSE G.PRE_MPNT_USABLE_YN END) AS PRE_PNT_USABLE_YN
  48. , G.MIN_ORD_QTY
  49. , G.MAX_ORD_QTY
  50. , G.DAY_MAX_ORD_QTY
  51. , G.SEX_GB
  52. , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
  53. , E.DELV_FEE
  54. , E.MIN_ORD_AMT
  55. , G.GOODS_GB
  56. , (SELECT MAX(NI_CLSF_CD) FROM tb_goods_noti_info WHERE GOODS_CD = G.GOODS_CD) AS NI_CLSF_CD
  57. , G.MAIN_COLOR_CD
  58. , G.SUPPLY_COMP_CD
  59. , G.SELF_MALL_YN
  60. , G.AGE_GRP_CD
  61. , FN_GET_CODE_NM('G023',G.AGE_GRP_CD) AGE_GRP_NM
  62. , G.SEASON_CD
  63. , FN_GET_CODE_NM('G006',G.SEASON_CD) SEASON_NM
  64. -- , G.GIFT_PACK_YN
  65. -- , G.NEW_CUST_ORD_YN
  66. -- , G.ADULT_YN
  67. , G.GOODS_TYPE
  68. -- , G.CHANGEABLE_YN
  69. -- , G.RETURNABLE_YN
  70. -- , (SELECT CATE1_NO FROM TB_SITE_BRAND WHERE BRAND_CD = G.BRAND_CD AND SITE_CD = 'G000_10' AND USE_YN = 'Y') AS BRAND_CATE1_NO
  71. , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IF(G.SELF_GOODS_YN = 'Y' AND G.GOODS_TYPE ='G056_N', O.OPT_CD1, G.MAIN_COLOR_CD) AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
  72. , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IF(G.SELF_GOODS_YN = 'Y' AND G.GOODS_TYPE ='G056_N', O.OPT_CD1, G.MAIN_COLOR_CD) AND MOUSEOVER_IMG_YN = 'Y') AS SYS_IMG_NM2
  73. -- , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN -- 실시간 데이터 반영?
  74. , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
  75. ELSE CURR_STOCK_QTY
  76. END) ,0)
  77. FROM VW_STOCK
  78. WHERE GOODS_CD = G.GOODS_CD
  79. AND OPT_CD1 = (CASE WHEN G.SELF_GOODS_YN = 'N' THEN OPT_CD1
  80. ELSE IFNULL(G.MAIN_COLOR_CD,'XX') END)
  81. GROUP BY GOODS_CD )
  82. ELSE (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
  83. ELSE CURR_STOCK_QTY
  84. END) ,0)
  85. FROM VW_STOCK_COMPOSE
  86. WHERE GOODS_CD= G.GOODS_CD
  87. GROUP BY GOODS_CD )
  88. END) AS STOCK_QTY
  89. , K.AD_KEYWORD
  90. , (SELECT GROUP_CONCAT(DISTINCT CONCAT(C4.LEAF_CATE_NO , '|', C4.FULL_CATE_NM ) ) FROM TB_CATE_4SRCH C4
  91. INNER JOIN TB_CATE_GOODS CG ON C4.LEAF_CATE_NO = CG.CATE_NO
  92. WHERE C4.SITE_CD = 'G000_10'
  93. AND C4.CATE_TYPE = 'G031_10' -- 상품타입
  94. AND C4.CATE_GB = 'G032_101' --
  95. AND CG.GOODS_CD = G.GOODS_CD) AS CATE_INFO
  96. , G.REG_DT AS REG_DT
  97. , GS.SELL_WEEK_QTY AS ORDER_CNT
  98. , GS.REVIEW_REG_CNT AS REVIEW_CNT
  99. , (CASE WHEN G.SELF_GOODS_YN ='Y' AND ifnull(QDS.GOODS_CD, 'Y') THEN 'Y' ELSE 'N' END ) AS QUIK_DELV_YN
  100. -- , FN_IS_GOODS_COUPON('P',G.GOODS_CD, BP.CURR_PRICE) AS COUPON_PC_ICON -- 속도 이슈
  101. -- , FN_IS_GOODS_COUPON('M',G.GOODS_CD, BP.CURR_PRICE) AS COUPON_MO_ICON
  102. -- , FN_IS_GOODS_COUPON('A',G.GOODS_CD, BP.CURR_PRICE) AS COUPON_APP_ICON
  103. -- , (CASE WHEN BP.CURR_PRICE <= E.MIN_ORD_AMT THEN 'Y' ELSE 'N' END) AS DELV_FREE_ICON
  104. -- , FN_GET_FREEGIFT_GOODS_YN(G.GOODS_CD) AS FREEGIFT_ICON
  105. -- , (CASE WHEN G.FORMAL_GB = 'G009_10' THEN 'Y' ELSE 'N' END) AS NEW_GOODS_ICON
  106. FROM TB_GOODS G
  107. INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
  108. AND B.USE_YN = 'Y'
  109. INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
  110. AND BG.USE_YN = 'Y'
  111. -- INNER JOIN (SELECT GOODS_CD
  112. -- , FN_GET_BENEFIT_PRICE( 'P' /**P*/,GOODS_CD, CURR_PRICE, '00' /**P*/) AS CURR_PRICE
  113. -- FROM TB_GOODS
  114. -- ) BP ON G.GOODS_CD = BP.GOODS_CD
  115. INNER JOIN TB_DELV_FEE_POLICY E ON G.SUPPLY_COMP_CD = E.SUPPLY_COMP_CD
  116. AND G.DELV_FEE_CD = E.DELV_FEE_CD
  117. INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
  118. INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
  119. AND O.DISP_YN = 'Y'
  120. LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE BP ON G.GOODS_CD = BP.GOODS_CD
  121. AND BP.CUST_GB = 'G100_00'
  122. LEFT OUTER JOIN (SELECT AKG.GOODS_CD
  123. , GROUP_CONCAT(AK.AD_KEYWORD) AS AD_KEYWORD
  124. FROM TB_AD_KEYWORD AK
  125. INNER JOIN TB_AD_KEYWORD_GOODS AKG ON AK.AD_KEYWORD_SQ = AKG.AD_KEYWORD_SQ
  126. WHERE NOW() BETWEEN AK.AD_KEYWORD_STDT AND AK.AD_KEYWORD_EDDT
  127. AND AK.USE_YN = 'Y'
  128. GROUP BY AKG.GOODS_CD
  129. ) K ON G.GOODS_CD = K.GOODS_CD
  130. LEFT OUTER JOIN (SELECT MAX(GOODS_CD) AS GOODS_CD
  131. , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END) AS VIDEO_GB_M
  132. , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
  133. , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END) AS VIDEO_GB_S
  134. , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
  135. FROM (
  136. SELECT A.DISPLOC_VAL AS GOODS_CD
  137. , B.VIDEO_GB
  138. , B.VIDEO_VAL
  139. , A.REG_DT
  140. , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM
  141. FROM TB_VIDEO_DISPLOC A
  142. INNER JOIN TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ
  143. AND B.DISP_YN ='Y'
  144. WHERE A.DISPLOC_GB ='G'
  145. AND A.DISP_YN = 'Y'
  146. ) V
  147. ) V ON G.GOODS_CD = V.GOODS_CD
  148. LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
  149. -- LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
  150. -- AND IFNULL( 0 /**P*/, 0) = W.CUST_NO
  151. LEFT OUTER JOIN TB_GOODS_SHOT_DELV_SKIP QDS ON G.GOODS_CD = QDS.GOODS_CD
  152. WHERE 1 = 1
  153. -- AND G.GOODS_CD = '14443216' /**P*/ -- 테스트용 입점:STYS00000042 , 자사:14443216 , 딜 : STYD000000025 , 세트 : STYS00000042
  154. AND G.SELF_MALL_YN = 'Y' -- 자사몰 노출(기획전과 상품상세는 노출)
  155. -- AND G.SELF_GOODS_YN ='Y' -- 테스트용
  156. AND G.GOODS_STAT = 'G008_90'
  157. -- ) Z
  158. -- WHERE 1 = 1
  159. -- AND Z.AD_KEYWORD IS NOT NULL
  160. ;
  161. TRUNCATE TABLE TMP_SEARCH_ENGINE;
  162. CREATE TABLE TMP_SEARCH_ENGINE AS
  163. WITH TAB_GOODS AS (
  164. SELECT G.GOODS_CD
  165. , G.GOODS_NM
  166. , G.GOODS_TNM
  167. , G.GOODS_GB
  168. , G.FOREIGN_BUY_YN
  169. , G.PARALLEL_IMPORT_YN
  170. , G.ORDER_MADE_YN
  171. , G.GOODS_SNM
  172. , G.BRAND_CD
  173. , G.ITEMKIND_CD
  174. , G.FORMAL_GB
  175. , G.LIST_PRICE
  176. , G.CURR_PRICE
  177. , G.SELF_GOODS_YN
  178. , G.GOODS_STAT
  179. , G.PNT_PRATE
  180. , G.PRE_PPNT_USABLE_YN
  181. , G.PNT_MRATE
  182. , G.PRE_MPNT_USABLE_YN
  183. , G.MIN_ORD_QTY
  184. , G.MAX_ORD_QTY
  185. , G.DAY_MAX_ORD_QTY
  186. , G.SEX_GB
  187. , G.MAIN_COLOR_CD
  188. , G.SUPPLY_COMP_CD
  189. , G.SELF_MALL_YN
  190. , G.AGE_GRP_CD
  191. , G.SEASON_CD
  192. , G.GOODS_TYPE
  193. , G.REG_DT AS REG_DT
  194. FROM TB_GOODS G
  195. ), TAB_OPT_SIZE AS (
  196. /*옵션 사이즈 목록 조회*/
  197. /*자사상품*/
  198. SELECT G.GOODS_CD
  199. , O.OPT_CD
  200. , O.OPT_CD1
  201. , C.COLOR_FILE /*RGB값*/
  202. , GROUP_CONCAT(CONCAT(O.OPT_CD2,'|',O.SOLDOUT_YN,'|',VS.CURR_STOCK_QTY)) AS SIZE_INFO
  203. FROM TAB_GOODS G
  204. , TB_OPTION O
  205. , TB_COLOR C
  206. , VW_STOCK VS
  207. WHERE G.GOODS_CD = O.GOODS_CD
  208. AND O.OPT_CD1 = C.COLOR_CD
  209. AND O.GOODS_CD = VS.GOODS_CD
  210. AND O.OPT_CD = VS.OPT_CD
  211. AND G.SELF_GOODS_YN = 'Y' /*자사상품*/
  212. AND O.DISP_YN = 'Y'
  213. AND C.USE_YN = 'Y'
  214. GROUP BY G.GOODS_CD, O.OPT_CD, O.OPT_CD1, C.COLOR_FILE
  215. UNION ALL
  216. /*입점상품*/
  217. SELECT G.GOODS_CD
  218. , O.OPT_CD
  219. , G.MAIN_COLOR_CD AS OPT_CD1
  220. , NULL AS COLOR_FILE /*RGB값*/
  221. , GROUP_CONCAT(CONCAT(O.OPT_CD2,'|',O.SOLDOUT_YN,'|',VS.CURR_STOCK_QTY)) AS SIZE_INFO
  222. FROM TAB_GOODS G
  223. , TB_OPTION O
  224. , VW_STOCK VS
  225. WHERE G.GOODS_CD = O.GOODS_CD
  226. AND O.GOODS_CD = VS.GOODS_CD
  227. AND O.OPT_CD = VS.OPT_CD
  228. AND G.SELF_GOODS_YN = 'N' /*입점상품*/
  229. AND O.DISP_YN = 'Y'
  230. GROUP BY G.GOODS_CD, O.OPT_CD, G.MAIN_COLOR_CD
  231. ), TAB_OPT AS (
  232. /*옵션 목록*/
  233. SELECT OS.GOODS_CD
  234. , GROUP_CONCAT(OS.SIZE_INFO ORDER BY OS.SIZE_INFO) AS SIZES
  235. FROM TAB_OPT_SIZE OS
  236. GROUP BY OS.GOODS_CD, OS.OPT_CD1
  237. ), TAB_CPN_ICON AS (
  238. /*상품별 쿠폰 아이콘 목록*/
  239. SELECT G.GOODS_CD
  240. , FN_IS_GOODS_COUPON('P',G.GOODS_CD,GBP.PC_CURR_PRICE) AS CPN_PC_ICON -- 속도 이슈
  241. , FN_IS_GOODS_COUPON('M',G.GOODS_CD,GBP.MO_CURR_PRICE) AS CPN_MO_ICON
  242. , FN_IS_GOODS_COUPON('A',G.GOODS_CD,GBP.APP_CURR_PRICE) AS CPN_APP_ICON
  243. , FN_GET_FREEGIFT_GOODS_YN(G.GOODS_CD) AS FREEGIFT_ICON
  244. FROM TAB_GOODS G
  245. , TB_GOODS_BENEFIT_PRICE GBP
  246. WHERE G.GOODS_CD = GBP.GOODS_CD
  247. AND GBP.CUST_GB = 'G100_00'
  248. )
  249. SELECT G.*
  250. , O.SIZES
  251. , CI.CPN_PC_ICON
  252. , CI.CPN_MO_ICON
  253. , CI.CPN_APP_ICON
  254. , CI.FREEGIFT_ICON
  255. , I.SIZE_GB
  256. , CASE WHEN I.SIZE_GB = 'T' THEN '상의'
  257. WHEN I.SIZE_GB = 'B' THEN '하의'
  258. WHEN I.SIZE_GB = 'S' THEN '신발'
  259. ELSE NULL
  260. END AS SIZE_GB_NM
  261. FROM TAB_GOODS G
  262. , TAB_OPT O
  263. , TAB_CPN_ICON CI
  264. , TB_ITEMKIND I
  265. WHERE G.GOODS_CD = O.GOODS_CD
  266. AND G.GOODS_CD = CI.GOODS_CD
  267. AND G.ITEMKIND_CD = I.ITEMKIND_CD
  268. -- AND G.SELF_GOODS_YN = 'Y'
  269. -- AND G.GOODS_CD = '14373685'
  270. ;