테이블 컬럼(int)값 정렬 문제

테이블 컬럼(int)값 정렬 문제

QA

테이블 컬럼(int)값 정렬 문제

본문

item과 inventory라는 테이블의 첫번째 컬럼(it_id) 순서대로 정렬되는 리스트 페이지를 사용중인데 (게임의 인벤토리같은 느낌의 페이지입니다.)

컬럼의 종류가 int라서 그런지 정렬에 문제가 생깁니다ㅜㅜ

 

1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9

까지 한자릿수 레코드는 별 이상없이 정렬되지만 10 이상이 추가되면

 

10 / 11 ... / 1 / 20 / 21 .... / 2 / 3 .... 

이런 식으로 숫자가 밀리는 문제가 생기는데.. 

db나 코드를 어떤식으로 수정해야할지 아시는 분의 도움을 구합니다 ㅠㅠ

 

리스트 페이지의 코드는 아래와 같습니다.


<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 
$pin = null;
$p_count = 0;
 
// 개인 아이템
$pe_inven_sql = "select *, count(*) as cnt from {$g5['inventory_table']} inven, {$g5['item_table']} item where inven.user_id = '$user_id' and item.it_id = inven.it_id and inven.se_user_id = '' group by inven.it_id order by inven.it_id asc";
$pe_inven_result = sql_query($pe_inven_sql);
for($i; $row=sql_fetch_array($pe_inven_result); $i++) {
    $pin[$p_count] = $row;
    $p_count++;
}
$i = 0;
?>
<ul class="inventory-list">
<? 
for($i=0; $i < count($pin); $i++) { ?>
    <li class="box-line bak">
<? if($pin[$i][in_id]){ ?>
        <a href="#<?=$pin[$i][in_id]?>" class="inven-open-popup" data-idx="<?=$pin[$i][in_id]?>" data-type="">
            <img src="<?=$pin[$i][it_img]?>" />
        </a>
<? } ?>
    </li>
<? } 
if($i == 0) { 
?>
    <li class="no-data">
        보유중인 아이템이 없습니다.
    </li>
<? } ?>
</ul>

 

 

이 질문에 댓글 쓰기 :

답변 2

칼럼 타입이 int로 되어 있으면 그런 문제 없지 않나요?

char, varchar 이런 경우에 그런 문제가 발생하는 걸로 알고 있습니다.

 

order by order by (inven.it_id + 1) asc

it_id 칼럼의 데이터 타입은 varchar 이고, 실제들어가는 데이터가 숫자형인 경우,

현재는 varchar (문자)로 정렬처리되어 생기는 문제입니다.

 

쿼리를 다음과 같이 수정하는 방법이 있습니다. 

order by inven.it_id asc -> order by abs(inven.it_id) asc

쿼리 수정에 도움 주셔서 감사합니다!! 윗분이 알려주신 방법도, 트샷님이 알려주신 방법도 사용해보니 둘 다 말끔하게 처리됩니다! 답변 채택은 하나밖에 할 수 없어서 리플을 먼저 달아주신분께 드렸지만 두분께 모두 감사드립니다! ㅠㅠ!

답변을 작성하시기 전에 로그인 해주세요.
전체 5

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT