테스트 사이트 - 개발 중인 베타 버전입니다

규칙성 있는 테이블에서 해당 데이터(찾으려는) SELECT 하기 채택완료

kimckimc 8년 전 조회 2,183

예를들어


payment_201705

payment_201706 

payment_201707 

payment_201708 

payment_201709 


각각 테이블이 존재합니다.


해당 테이블은 한달에 한번씩 생성 됩니다.


아래 도표는 테이블 예시입니다.


<예시 테이블>

payment_XXXXXX 

 num

 user_id

 price

 0

 홍길동

 1000

 1

 박지성

 2000



이런 테이블이 생성되면서 상황에 따라 이렇게 데이터가 저장하는 시스템입니다.


그런데 여기서 제가 모든 payment_XXXXXX 테이블을 user_id가 "홍길동" 인 데이터만 모두 출력을 하고 싶습니다.


왜 테이블을 나누는 의문이 있을수 있는데 이 부분은 따로 말씀 안해주셨으면 합니다.


테이블을 LIKE 처럼 찾으면서 user_id가 "홍길동" 인 SELECT를 하는 방법이 따로 있을까요? 


</p><p>foreach($date_array AS $date) {</p><p>  $sql = "SELECT * FROM notice_tax_ " . $date . " WHERE user_id='홍길동'"; </p><p>  $db->query($sql);</p><p><span style="font-size: 11pt;">}</span> </p><p><span style="font-size: 11pt;">


혹시 이 방법이 아닌 다른 방법이 있을까요?


댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
8년 전

프로시져를 통해 가능합니다.


A. 유저레벨 index 를 만드는 것이니 만큼 설계가 필요합니다. 그래도 범위가 늘어나는만큼 검색속도가 느려집니다.

1. 별도의 index 테이블 생성

2. 테이블이 생성될때 별도의 index 테이블을 따로 업데이트 시킨다.

3. 인덱스에의해 필터링된 테이블 명 범위에서 루프 검색


B. 테이블이 많아지면 그만큼 검색속도가 느려집니다.

1. information_schema 에서 관련 테이블 전체 루프 검색

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플래토
8년 전

union all 하시면 될듯 한데요

</p><p>$sql = "";</p><p>$i = 0;</p><pre>foreach($date_array AS $date) {</pre><pre>
</pre><pre>  if ($i != 0) {$sql .= " union all ";}</pre><pre>
</pre><pre>  $sql .= " SELECT * FROM notice_tax_ " . $date . " WHERE user_id='홍길동' "; </pre><pre>
</pre><pre>  $i++;</pre><pre>
</pre><pre>} </pre><pre>
</pre><pre><pre style="font-size: 14.6667px;">$db->query($sql);</pre><pre style="font-size: 14.6667px;">
</pre><pre style="font-size: 14.6667px;">

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

8년 전
union이나 join 함수로 루프 돌면서 테이블끼리 연결 하셔야 합니다
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인