규칙성 있는 테이블에서 해당 데이터(찾으려는) 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를 하는 방법이 따로 있을까요?
foreach($date_array AS $date) {
$sql = "SELECT * FROM notice_tax_ " . $date . " WHERE user_id='홍길동'";
$db->query($sql);
}
혹시 이 방법이 아닌 다른 방법이 있을까요?
답변 3
프로시져를 통해 가능합니다.
A. 유저레벨 index 를 만드는 것이니 만큼 설계가 필요합니다. 그래도 범위가 늘어나는만큼 검색속도가 느려집니다.
1. 별도의 index 테이블 생성
2. 테이블이 생성될때 별도의 index 테이블을 따로 업데이트 시킨다.
3. 인덱스에의해 필터링된 테이블 명 범위에서 루프 검색
B. 테이블이 많아지면 그만큼 검색속도가 느려집니다.
1. information_schema 에서 관련 테이블 전체 루프 검색
union이나 join 함수로 루프 돌면서 테이블끼리 연결 하셔야 합니다
union all 하시면 될듯 한데요
$sql = "";
$i = 0;
foreach($date_array AS $date) {
if ($i != 0) {$sql .= " union all ";}
$sql .= " SELECT * FROM notice_tax_ " . $date . " WHERE user_id='홍길동' ";
$i++;
}
$db->query($sql);
!-->
답변을 작성하시기 전에 로그인 해주세요.