어려운 문제때 항상 도움을 주셔서 감사합니다.
=====================================
2개의 동일한 형태의 테이블을 union 합니다.
그런대,
A 테이블
thread writeday
5000 2013-10-22 11:24:41.783
4999 2013-10-22 18:17:15.033
B테이블
thread writeday
32000 2013-08-29 11:22:48.590
31999 2013-10-22 17:14:05.500
각 테이블별로 조회를 할때는 thread desc 로 합니다.
그러나, 2개 테이블을 unoin 하면 thread desc 로 하거나, writeday desc 하면 게시물이 엉켜버립니다.
writeday 로 정렬을 하면서, thread 로 연결되어 있는 글은 연결되서 나오게 하고 싶습니다.
어떻게 하면 될까요?
Comment 7
-
건우아빠
2013.11.20 19:14
-
생각찾기
2013.11.21 09:06
thread 는 게시물을 올릴때, unique 하게 주는 값(1000 단위로 증가)로입니다.
해당 게시물에 대한 글을 올리면, thread -1 로 해서 thread 를 줍니다.
그래서, 각 해당 테이블을 검색할때, thread desc 합니다.
-
군고구마
2013.11.21 06:37
두 테이블을 union 하고 그 다음에 전체를 thread로 order by 하면 안되나요?
thread 의미가 서로 다르면 당연히 안되는게 맞구요.
-
건우아빠
2013.11.21 09:57
ceiling( thread / 1000.) 로 최근 일자(가장큰일자 등 ) 를 구하신다음 순서를 부여하고 이걸로 조인을 하셔셔
소트를 하셔야 할듯 합니다.
-
생각찾기
2013.11.21 11:55
어렵내요.....ㅠㅠ..간단한 예제라도..죄송합니다..ㅠㅠ
-
건우아빠
2013.11.21 12:59
with
t_a as (
select 5000 thread,'2013-10-22 11:24:41.783' writeday union all
select 4999 ,'2013-10-22 18:17:15.033' ) ,
t_b as (
select 32000 thread,'2013-08-29 11:22:48.590' writeday union all
select 31999 ,'2013-10-22 17:14:05.500' ) ,
t_gb_sort as (
select thread_gb
, MAX(writeday) writeday
, ROW_NUMBER() over ( order by MAX(writeday) asc ) sort
from (
select CEILING(thread / 1000.) thread_gb , *
from t_a
union all
select CEILING(thread / 1000.) ,*
from t_b ) r
group by thread_gb )select a.* ,b.sort
from t_a a join t_gb_sort b on CEILING(a.thread / 1000.) = b.thread_gb
union all
select a.* ,b.sort
from t_b a join t_gb_sort b on CEILING(a.thread / 1000.) = b.thread_gb
order by sort , thread desc -
생각찾기
2013.11.21 18:00
감사합니다.
주신 예제로 해결했습니다.
thread_gb 가 같을때 조금 문제가 있어지만, 각 테이블에 고유값을 하나 넣어서 JOIN 할때 매칭 시키니 해결이 되었내요.
thread 로 연결되어 있는다게 어떤 규칙이 있는지 ?