2013-03-21 3 views
0

나는 이것을 오랫동안 찾았지만 찾은 해결책은 필요에 따라 작동하지 않습니다.MySQL Natural Sort (OSX Finder와 유사)

설명해 드리겠습니다 : 정렬을 위해 사용되는 영숫자 SKU가있는 수십만 개의 제품이 포함 된 표가 있습니다.

Category Code (알파벳 문자의 가변 수),

Product Number (정수),

Product Model Variation (알파벳 문자의 선택, 다양한 수의) 예를 들어

: 이 SKU는 다음과 같이 구성 MANT 12 CL (공백없이)


지금, 나는 그들과 같이 주문 (그리고 이러한 파일 이름 인 경우, OSX 파인더 완벽을 주문할 것) 얻을 필요가 :

MANT1 
MANT12 
MANT12C 
MANT12CL 
MANT12P 
MANT13 
MANT2 
MANT21 
MANT24 
MANT24D 
MANT29 
MANT2C 
MANT2D 
MANT2W 
MANT3 
MANT4C 
MANT9 

그리고 ORDER BY LENGTH(sku), sku이있다 : 물론 ORDER BY sku

MANT1 
MANT2 
MANT2C 
MANT2D 
MANT2W 
MANT3 
MANT4C 
MANT9 
MANT12 
MANT12C 
MANT12CL 
MANT12P 
MANT13 
MANT21 
MANT24 
MANT24D 
MANT29 

은 분명히 잘못된 것입니다 모델 변형을 정렬하는 데 문제가 있습니다.

MANT1 
MANT2 
MANT3 
MANT9 
MANT12 
MANT13 
MANT21 
MANT24 
MANT29 
MANT2C 
MANT2D 
MANT2W 
MANT4C 
MANT12C 
MANT12P 
MANT24D 
MANT12CL 

Finder처럼이 항목을 정렬 할 수있는 방법이 있습니까?

(또한, 한 번 분류, 다음 및 이전 제품을 얻을 수있는 방법이 내가 여러 쿼리를 사용하여 상관 없어?이 시점 우아함에서 내 문제의 마지막 ...)

감사합니다 모두들 사전에.


마지막 한가지는 내 검색하는 동안 나는 this answer to a similar question 를 발견했습니다하지만 난 어떻게 PHP에서 사용하는 아무 생각이 없다, 그래서 작동하고 실제로 내 질문에 대한 대답은 나도 몰라.

답변

1

데이터를 가져올 때 PHP를 사용하고 있습니까?

그렇다면 데이터가 이미로드 된 후 메모리 정렬을 위해 natural sort function을 사용해보십시오.

+0

오 사람이 그렇게 간단하지만 나는'(가)'나에게 발생하지 않았다 natsort을 일 수십 시간에. 고마워요! – Copons

0

순서가 '보통 오류'가 아니며 단순히 어떤 데이터 정렬을 사용 하느냐에 달려 있습니다. 귀하의 경우에는 'latin1_bin'과 같이 이진 데이터 정렬을 시도 할 수 있습니다.

예를 UTF8 데이터를 COLLATE를 사용하여 순서에 따라 :

mysql> SELECT c1 FROM t1 ORDER BY c1; 
+------+ 
| c1 | 
+------+ 
| a1 | 
| a12 | 
| a13c | 
| a2 | 
| a21 | 
+------+ 

mysql> SELECT c1 FROM t1 ORDER BY c1 COLLATE 'utf8_bin'; 
+------+ 
| c1 | 
+------+ 
| a1 | 
| a12 | 
| a2 | 
| a21 | 
| a13c | 
+------+ 
+0

실제로 필요한대로 작동하지 않습니다 :'a2'는'a1' 다음에 있어야하고, a13c''는'a12' 다음에 와야합니다. 어쨌든 고마워요! – Copons