jquery DataTable 관련 질문드립니다!!
조회수 599회
DataTable을 통해 테이블을 만들고 정렬을 하는 과정에서 문제가 생겨 질문드립니다.
모두 잘 정렬이 되는데 테이블의 한 열의 데이터가 아래와 같은 형식입니다.
12 (10%)
37 (2.1%)
1 (0.2%)
111 (1.8%)
위와같은 데이터 형식을 가졌는데 정렬을 눌렀을 때 %기준으로 정렬이 되도록 하고 싶습니다.
어떤식으로 하면 ()안의 숫자를 인식해서 정렬할 수 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
SELECT *
해서 나온 실제 DB 데이터가 퍼센트값까지 포함한 문자열이라면... 성능을 포기하고 사용자 정의 정렬을 적용해서 응답으로 넘겨줘야겠죠. (지금 사례에서 알 수 있듯이, 이런 데이터는 안 좋은 형태의 데이터입니다. 이를테면percentage
같은 이름의 별도 컬럼이 존재해서 거기에 저 퍼센트 값들만 따로 있어야 하지요. 그러면 말이 쉬운데.)PHP라면 이렇게 합니다. 어떤 순서/원리 로 전개되는지만 살펴보세요.
// 변수 설명 // $data 는 filteredData 배열 // $orderBy 는 datatable 이 넘긴 정렬기준컬럼 // $orderDirection 은 datatable 이 넘긴 정렬방향 (asc / desc) // 문제의 컬럼 이름은 'col3' 이라고 가정함 if ($orderBy == 'col3') { // usort(배열, 콜백(a, b)) 함수는 배열을 콜백 결과에 따라 정렬해준다. // 이 콜백은 예컨대 a가 앞에 와야 할 경우 음수를 반환해야 한다. usort($data, function ($a, $b) use ($orderDirection) { // 문자열 쪼개기 기법으로 괄호 안의 문자열을 얻는다. // 이것때문에 번번이 regex 매칭을 돌리는 건 너무 빡세므로... $rightSideA = explode(' (', $a['col3'])[1]; $percentageA = (float) str_replace('%)', '', $rightSideA); $rightSideB = explode(' (', $b['col3'])[1]; $percentageB = (float) str_replace('%)', '', $rightSideB); // float 2개를 얻었으므로 이걸 기준으로 정렬한다. return $orderDirection == 'desc' ? $percentageB - $percentageA : $percentageA - $percentageB; }); }
댓글 입력