프로젝트

일반

사용자정보

sql_dbo.CF_GetMainCafeListPosts.sql

튜닝 후 - (개발본부 플랫폼솔루션팀)송기선, 2022/02/02 15:39

 
1

    
2
/*
3

4
exec dbo.CF_GetMainCafeListPosts 'ko', 0, N'', 'users', 1, 10
5

6
*/
7
CREATE PROC [dbo].[CF_GetMainCafeListPosts]
8
  @lang_cd varchar(20),
9
  @menu_id int,
10
  @keyword NVARCHAR(100),
11
        @orderby VARCHAR(20),
12
        @cpage INT,
13
        @pagesize INT
14
AS
15

    
16
DECLARE 
17
        @totcnt INT;
18

    
19
BEGIN
20

    
21
  SET @totcnt = 0;
22

    
23
  with wa
24
  as (
25
  select 
26
    pvt.CAFE_ID, isnull(pvt.[1], 0) POSTRANK1, isnull(pvt.[2], 0) POSTRANK2, isnull(pvt.[3], 0) POSTRANK3 
27
    from (
28
          select 
29
            pd.CAFE_ID, pd.prank, pd.POST_ID
30
            from (
31
                  select
32
                    ROW_NUMBER() over(partition by p.cafe_id order by p.dt desc) prank,
33
                    p.cafe_id, p.post_id
34
                    from dbo.CF_POSTS p
35
                   where 1=1
36
                     and p.STAT <> 9
37
                 ) pd
38
            left outer join dbo.CF_POSTS pt on pt.CAFE_ID = pd.CAFE_ID and pt.POST_ID = pd.POST_ID
39
           where 1=1
40
             and pd.CAFE_ID <> ''
41
             and pd.CAFE_ID is not null
42
             and pd.prank in (1, 2, 3)
43
           group by
44
            pd.CAFE_ID, pd.prank, pd.POST_ID
45
         ) tp
46
   pivot ( max(tp.post_id) for tp.prank in ([1], [2], [3]) ) as pvt
47
  )
48
  select 
49
    @totcnt = COUNT(*)
50
    from wa
51
    left outer join dbo.CF_CAFE_INFO cc on cc.cafe_id = wa.CAFE_ID
52
    left outer join dbo.CF_POSTS p1 on p1.CAFE_ID = wa.CAFE_ID and p1.POST_ID = wa.POSTRANK1
53
    left outer join dbo.CF_POSTS p2 on p2.CAFE_ID = wa.CAFE_ID and p2.POST_ID = wa.POSTRANK2
54
    left outer join dbo.CF_POSTS p3 on p3.CAFE_ID = wa.CAFE_ID and p3.POST_ID = wa.POSTRANK3
55
    left outer join dbo.CF_CAFE_MEMBERS c1 on c1.CAFE_SEQ = cc.SEQ 
56
      and c1.MEM_NO in (select top 1 mem_no from dbo.CF_MEMBER where mem_email = p1.MEM_EMAIL)
57
    left outer join dbo.CF_CAFE_MEMBERS c2 on c2.CAFE_SEQ = cc.SEQ 
58
      and c2.MEM_NO in (select top 1 mem_no from dbo.CF_MEMBER where mem_email = p2.MEM_EMAIL)
59
    left outer join dbo.CF_CAFE_MEMBERS c3 on c3.CAFE_SEQ = cc.SEQ 
60
      and c3.MEM_NO in (select top 1 mem_no from dbo.CF_MEMBER where mem_email = p3.MEM_EMAIL)
61
   where cc.STAT <> 9
62
     and cc.IS_PUBLIC = 'Y'
63
     and cc.CAFE_LANG = 'ko'
64
;
65

    
66

    
67
with wa
68
as (
69
select 
70
  pvt.CAFE_ID, isnull(pvt.[1], 0) POSTRANK1, isnull(pvt.[2], 0) POSTRANK2, isnull(pvt.[3], 0) POSTRANK3 
71
  from (
72
        select 
73
          pd.CAFE_ID, pd.prank, pd.POST_ID
74
          from (
75
                select
76
                  ROW_NUMBER() over(partition by p.cafe_id order by p.dt desc) prank,
77
                  p.cafe_id, p.post_id
78
                  from dbo.CF_POSTS p
79
                 where 1=1
80
                   and p.STAT <> 9
81
               ) pd
82
          left outer join dbo.CF_POSTS pt on pt.CAFE_ID = pd.CAFE_ID and pt.POST_ID = pd.POST_ID
83
         where 1=1
84
           and pd.CAFE_ID <> ''
85
           and pd.CAFE_ID is not null
86
           and pd.prank in (1, 2, 3)
87
         group by
88
          pd.CAFE_ID, pd.prank, pd.POST_ID
89
       ) tp
90
 pivot ( max(tp.post_id) for tp.prank in ([1], [2], [3]) ) as pvt
91
)
92
select 
93
  wa.CAFE_ID, wa.POSTRANK1, wa.POSTRANK2, wa.POSTRANK3,
94
  (select count(*) from dbo.CF_CAFE_MEMBERS where CAFE_SEQ = cc.SEQ) MEM_CNT,
95
  (select wp.DT from dbo.CF_POSTS wp where wp.CAFE_ID = wa.CAFE_ID and wp.POST_ID = wa.POSTRANK1) as POSTRANK1_DT,
96
  --cc.CAFE_ID,
97
  p1.POST_ID POST_ID1, isnull(p1.POST_TITLE, '') POST_TITLE1, p1.DT WRITE_DT1, isnull(c1.CAFE_NICK, '') CAFE_NICK1,
98
  p2.POST_ID POST_ID2, isnull(p2.POST_TITLE, '') POST_TITLE2, p2.DT WRITE_DT2, isnull(c2.CAFE_NICK, '') CAFE_NICK2,
99
  p3.POST_ID POST_ID3, isnull(p3.POST_TITLE, '') POST_TITLE3, p3.DT WRITE_DT3, isnull(c3.CAFE_NICK, '') CAFE_NICK3,
100
  cc.CAFE_NAME, cc.CAFE_LANG LANG_CD, cc.REGION_CD, cc.TIMEZONE,
101
  (select top 1 file_name from dbo.CF_CAFE_FILES where cafe_id = cc.CAFE_ID and file_type = 1 order by dt desc) as cafe_icon_file
102
  from wa
103
  left outer join dbo.CF_CAFE_INFO cc on cc.cafe_id = wa.CAFE_ID
104
  left outer join dbo.CF_POSTS p1 on p1.CAFE_ID = wa.CAFE_ID and p1.POST_ID = wa.POSTRANK1
105
  left outer join dbo.CF_POSTS p2 on p2.CAFE_ID = wa.CAFE_ID and p2.POST_ID = wa.POSTRANK2
106
  left outer join dbo.CF_POSTS p3 on p3.CAFE_ID = wa.CAFE_ID and p3.POST_ID = wa.POSTRANK3
107
  left outer join dbo.CF_CAFE_MEMBERS c1 on c1.CAFE_SEQ = cc.SEQ 
108
    and c1.MEM_NO in (select top 1 mem_no from dbo.CF_MEMBER where mem_email = p1.MEM_EMAIL)
109
  left outer join dbo.CF_CAFE_MEMBERS c2 on c2.CAFE_SEQ = cc.SEQ 
110
    and c2.MEM_NO in (select top 1 mem_no from dbo.CF_MEMBER where mem_email = p2.MEM_EMAIL)
111
  left outer join dbo.CF_CAFE_MEMBERS c3 on c3.CAFE_SEQ = cc.SEQ 
112
    and c3.MEM_NO in (select top 1 mem_no from dbo.CF_MEMBER where mem_email = p3.MEM_EMAIL)
113
 where cc.STAT <> 9
114
   and cc.IS_PUBLIC = 'Y'
115
   and cc.CAFE_LANG = @lang_cd
116
 order by POSTRANK1_DT desc
117

    
118

    
119
print @totcnt;
120
        RETURN @totcnt;
121

    
122
END
123

    
124

    
125
GO
126

    
127

    
클립보드 이미지 추가 (최대 크기: 10 MB)