규칙성 있는 테이블에서 해당 데이터(찾으려는) SELECT 하기 채택완료
예를들어
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개
프로시져를 통해 가능합니다.
A. 유저레벨 index 를 만드는 것이니 만큼 설계가 필요합니다. 그래도 범위가 늘어나는만큼 검색속도가 느려집니다.
1. 별도의 index 테이블 생성
2. 테이블이 생성될때 별도의 index 테이블을 따로 업데이트 시킨다.
3. 인덱스에의해 필터링된 테이블 명 범위에서 루프 검색
B. 테이블이 많아지면 그만큼 검색속도가 느려집니다.
1. information_schema 에서 관련 테이블 전체 루프 검색
댓글을 작성하려면 로그인이 필요합니다.
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;">
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인