DB에 없는 값으로 테이블 정렬하기
본문
회원정보를 출려가는 테이블을 만들었는데요.
테이블 값 중 하나가 DB에 저장되어 있지 않은 값입니다.
그런데 이값으로 테이블을 정렬할 방법은 없나해서 질문 드립니다.
예를 들어
----------------------
mb_name rate
----------------------
김태희 30
정우성 70
이렇게 되어 있는 테이블을 rate값으로 오름차순과 내림차순을 하고 싶습니다.
이때 rate는 DB에 저장되어 있는 것이 아니라 연산을 통해 새로 얻은 값입니다. (회정정보를 sql_query로 가져온 후 sql_fetch_array에서 rate 계산) 연산량이 많아서 sql안에 넣기는 힘듭니다.
그래서 sql_query를 실행할때 order by로는 오름차순(내림차순)을 못하는것 같습니다.
rate값으로 정렬할 수 있는 방법이 없을까요??
답변 4
우선 배열을 두개 만드셔서,
첫번째(A)는 2차원배열로 key : mb_id , value : 회원정보
두번째(B) 배열은 1차원배열로 key : mb_id, value : rate
형태로 정의해주시구요,
결과값을 각각 A,B 배열에 넣으신 후 B배열을 가지고
아래 배열 정렬 함수들을 이용하여 소팅 후에 소팅된 B배열의 key값(mb_id)을 가지고 회원 정보 배열(A배열)에서 해당 정보를 가져오면 좋을 듯 합니다.
B배열의 rate값을 가지고 정렬하시면 제생각에는 sort()나 rsort()를 이용하시면 좋을듯하네요^^
그러면 정렬된 B배열의 key값이 mb_id가 될테니... B배열의 key값(mb_id)을 가지고 A배열의 key값으로 불러오면 해당 회원의 정보들이 1차원 배열로 나오겠죠?!^^
- arsort() - 배열을 내림차순 정렬하고 인덱스의 상관관계를 유지
- asort() - 배열을 정렬하고 인덱스 상관 관계를 유지
- ksort() - 키에 의한 배열 정렬
- rsort() - 역순으로 배열 정렬
- usort() - 사용자 정의 비교 함수를 사용하여 값에 의한 배열 정렬
- uksort() - 사용자 정의 비교 함수를 사용하여 키에 의한 배열 정렬
- array_multisort() - 여러 배열이나 다차원 배열 정렬
- krsort() - 키에 의한 배열 역순 정렬
- natsort() - "자연순" 알고리즘으로 배열 정렬
- natcasesort() - "자연순" 알고리즘으로 대소문자를 구분하지 않고 배열 정렬
rate는 DB에 저장되어 있는 것이 아니라 연산을 통해 새로 얻은 값입니다.
라고 했습니다.
rate 라는 것이 어떤 정보인지는 모르겠지만, rate 의 값에 영향이 생기는 일이 발생하면 그것을 계산해서 g5_member 테이블에 rate 필드에 업데이트를 해서 관리하는게 더 효율적이지 않을까 생각합니다.
$sql 따로빼셔서 잘이용하시면 order 부분 변경하시는게 편하실텐데..ㅎㅎ
계산을 sql로 수행하시고, join 기능을 이용해서 정렬하시는게 나을듯 싶습니다.(속도면에서도)