테이블 컬럼(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
답변을 작성하시기 전에 로그인 해주세요.