2010-04-05 4 views
0

열을 오름차순 및 내림차순으로 정렬 할 수있는 PHP 코드가 있습니다 (테이블 행 제목 클릭시). 내 D.O.B 열 (날짜/시간 필드 유형 포함)에는 완벽하게 작동하지만 수량 열에는 적합하지 않습니다.'ORDER BY'절을 수정하여 하나 이상의 정수로 조건을 판단하십시오.

예를 들어, 내가 10, 50, 100, 30 및 다른 사람의 quantites을하는 것은 100

순서는 첫 번째 정수를 감상하는 것, 그래서 열의 내 정렬이 순서대로 끝 : 10, 100, 100, 30, 50 ... 및 50, 30, 100, 100, 10.

100이 50보다 크므로 분명히 부정확하므로 100 값이 모두 끝에 반드시 표시되어야합니까? "100"은 '1'값만 고려한 것으로 보입니다. 그러면 시스템에 다른 값이 0으로 인식되기 때문에 10보다 먼저 나타납니다.

정상적으로 발생합니까? 이 문제를 해결할 수있는 방법이 있습니까? 어떤 도움을 주셔서 감사합니다. 추신 필요한 경우 코드를 표시 할 수 있지만 이것이 일반적인 문제인지 여부를 알고 싶습니다.

+0

포스트는 정렬을 수행하는 데 사용하는 내용의 예. 데이터베이스는 정렬을 수행하는 이상적인 장소입니다. ORDER BY에서 CASE 문을 사용하거나 동적 SQL을 사용하여 쿼리를 구성 할 수 있습니다 (자세한 내용은 MySQL의 Prepared Statements 참조). –

+0

안녕하세요, 귀하의 의견을 주셔서 감사합니다, 내가 생각하기에 이것에 대한 가장 쉬운 방법은 지금 간단하게 정수로 필드 유형을 변경하는 것입니다, 다행히도 데이터베이스가 너무 크지 않고 값은 새로운 구성을 테스트하기 위해 변경하는 것이 간단합니다. 다시 한 번 감사드립니다 – Yvonne

답변

0

숫자 대신 문자열로 값을 고려하여 정렬하는 것처럼 들립니다. 정렬 작업은 무엇입니까? PHP 또는 MySQL? 실제로 그것을 정렬하는 코드를 보지 않고 잘못된 것이 무엇인지 말하기는 어렵습니다.

+0

아 물론 그렇습니다. 이유는 quantites 열이 백분율로 정의된다는 것입니다. 그러므로 문자열이 가장 적절할 것이라고 생각 했습니까? 숫자 데이터 형식으로 변환 한 다음 HTML 내에 백분율 기호를 추가 할 수도 있습니다. 이것이 가장 좋은 방법일까요? – Yvonne

+0

비싸지 만'CONVERT (your_value, SIGNED INTEGER) AS s_col' 쿼리에 다른 열을 추가하고이를 정렬 할 수 있습니다. http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_convert. – Buggabill

+0

예, 숫자 데이터 유형으로 변경하고 디스플레이에 % 기호 만 추가합니다. 그것은 숫자 데이터입니다. 그런 식으로 저장하면 데이터베이스가 더 효과적으로 처리 할 수 ​​있습니다. –

0

필드는 아마도 numeric type이 아닌 string type으로 char/varchar/text/...로 정의됩니다. 이 경우 사전 식 분류가 수행됩니다.

+0

아 물론 그렇습니다. 그 이유는 quantites 열이 백분율로 정의되어 있기 때문에 문자열이 가장 적절하다고 생각했기 때문입니다. 숫자 데이터 형식으로 변환 한 다음 HTML 내에 백분율 기호를 추가 할 수도 있습니다. 이것이 가장 좋은 방법일까요? – Yvonne

+0

예. 예 : 해당 정밀도가 응용 프로그램에 충분하면 밀리미터 값을 정수 (101 -> 10.1 %)로 저장하십시오. 또는 'NUMERIC'유형을 사용하십시오. – VolkerK

0

정렬은 데이터를 정수가 아닌 문자열로 처리합니다. 데이터베이스에서 컬럼의 데이터 유형을 점검하십시오. 문자열이 아닌 숫자 인 경우 데이터는 데이터베이스와 정렬 루틴 사이의 문자열로 변환됩니다.

0

문자열이 아닌 숫자를 정렬하는 것처럼 보이지만 열의 데이터 형식은 무엇입니까? 문자열 번호를 올바르게 정렬하는 유일한 방법은 앞에 0을 추가하는 것이지만 데이터를 적절한 유형으로 저장하는 것이 가장 좋으므로 데이터를 선택할 때마다 이러한 조작을 수행 할 필요가 없습니다.

0

어떤 이유에서든 열을 문자 유형으로 두어야하는 경우 주문에 적합한 숫자 유형으로 변환 할 수 있습니다. 이것은 단순히 열을 변경하는 것보다 덜 효율적입니다.

ORDER BY CAST(theColumn AS DECIMAL(5, 2)) 

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

0

귀하의 열은 텍스트 형식입니다. 열 유형을 영구적으로 변경하거나 정렬 할 때 열 유형을 캐스팅 할 수 있습니다.

ALTER TABLE [Table] 
MODIFY COLUMN [Column] INTEGER UNSIGNED NOT NULL DEFAULT '0'; 

또는 캐스트 (다른 ​​기본값을 할 수 있습니다) 변경할 때 일종의

SELECT * 
    FROM [Table] 
ORDER BY CAST([Column] as UNSIGNED INTEGER) ASC; 
+0

유일한 문제는 quanitties가 백분율로 정의 된 것을 잊었다는 것입니다! 따라서 문자열 내의 정수 뒤에 '%'기호가 나타납니다. 여전히 숫자 유형으로 백분율 값을 저장합니까? – Yvonne

+0

백분율 기호는 "ft"또는 "mph"와 같은 단위의 레이블 일뿐입니다. 데이터 열에는 비즈니스가 없습니다. 그래서 그렇습니다. 절대적으로 백분율 값을 숫자 유형으로 저장하려고합니다. –

관련 문제