개발 Q&A

제목 2개의 테이블 페이징처리
카테고리 DB
글쓴이 주말생각 작성시각 2021/04/09 17:11:26
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 9373   RSS

현재 mysql 5.0 버전을 사용 중입니다. CI는 3.0버전을 사용 중 이고요.

테이블A와 테이블B를 각각 select하고 2개의 조회한 값(연관배열)을 1개의 연관배열로 합칩니다.

2개의 테이블을 조회할 떼, 조건을 같습니다.

테이블A를 조회해서 얻은 값을 수가 10개로 테이블B를 조회해서 얻은 값은 수가 30이고

두 테이블의 중복되는 부분이 있어서(3개) 합치면 배열의 크기 수는 37이 됩니다.

이것을 바탕으로 페이지네이션을 구현하여야 하는데, 기존에 사용하던 방식은 하나의 테이블일 경우에 limit 0, 10 이런 식으로 10개만 구하고 2번째 페이징 번호를 클릭하면 limit 10, 10이런 식으로 구현하였습니다.

그러나 위의 두 테이블을 각각 조회하고 하나의 배열로 합치면 위의 방법을 사용할 수가 없고, array_slice를 사용한다고 해도

페이지를 이동할 때마다 2개의 테이블이 모든 값을 더하고 하나로 합치는 작업을 계속해야 합니다. 갯수가 얼마 되지 않는다면 크게 문제가 되지 않겠지만 데이터량이 많을 때도 있어서 서버에 부하가 많이 갈 것 같습니다.

뭔가 성능 저하 없이 구현할 수 있는 방법이 존재할까요?

카테고리를 DB로 지정했는데, 이것을 DB로 처리해야할지 php코드로 처리해야할지 모르겠네요.

 다음글 Parse error: syntax error, une... (2)
 이전글 .doc 파일 첨부했는데 mine type이 text/... (4)

댓글

변종원(웅파) / 2021/04/09 17:19:17 / 추천 0

join 처리하면 간단한데 조건이 안되는건가요?

1. join : https://m.blog.naver.com/PostView.nhn?blogId=islove8587&logNo=220953972194&proxyReferer=https:%2F%2Fwww.google.com%2F

2. mysql view나 temporary table 을 이용한다.

주말생각 / 2021/04/09 17:35:38 / 추천 0

조인은 할 수 없는 상황입니다.

view를 사용하면 데이터 조회할 때 속도 저하는 없나요?

+view를 사용한다고 가정해서 합쳐진 배열에 값들을 view에 넣고 view를 이용해서 페이징처리를 하고

이용자가 해당 앱을 닫으면 뷰 테이블도 삭제시키고 다시 이용자가 호출하면 뷰를 만들고 하는 식으로 구현을 해야하는 건가요?

+뷰의 데이터를 변경하면 참조한 테이블의 데이터도 변경된다고 알고 있는데 뷰를 생성하고 배열을 값을 뷰에 넣는 경우에는 테이블 참조가 아니라서 기존 테이블의 값은 변경이 되지 않겠죠?

토끼깽깽 / 2021/04/12 10:33:25 / 추천 0

뷰에 인덱스등을 잘 설정하면 큰 저하는 없다고 알고 있습니다. 조작할 수 있는 뷰의 갯수나 데이터의 크기는 메모리의 영향을 받는 것으로 알고 있습니다. 이 점은 테스트 해보셔야 할 것 같아요.

그리고 단순 뷰인 경우 입력, 수정 등이 사용 가능하지만 여러 테이블을 조합하는 경우 제약사항이 있는 걸로 알아요. 보통은 읽기전용으로 많이 쓰이지 않나요? 데이터베이스마다 약간 상이하기 때문에 잘 알아보시고 제약을 걸어서 사용하시면 데이터 변조는 막을 수 있을거에요.

한대승(불의회상) / 2021/04/12 12:21:50 / 추천 0
view는 가능한데 join이 안되는다는게 잘 이해가... ^^;;
주말생각 / 2021/04/12 13:35:50 / 추천 0
2개의 테이블이 대부분 각각 같은 곳에서 사용되기는 한데, 기본적으로 서로 다른 값의 내역 정보라서 join할 만한 마땅한 키가 없습니다.
변종원(웅파) / 2021/04/12 13:43:29 / 추천 0
주말생각/ 10개, 30개 데이터중 중복되는거 제외라고 하셨는데 중복되는 기준이란게 있는 상태입니다.  union 처리도 가능하고 join도 가능합니다. 
한대승(불의회상) / 2021/04/12 16:29:44 / 추천 0
웅파님 의견처럼 UNION 으로 처리하는 방법이 있겠군요.