STORY_LENGTH
이라는 필드 (문자열 데이터 유형)로 레코드 순서를 정렬한다고 가정합니다. 이 필드는 다중 값 필드이며 쉼표를 사용하여 여러 값을 나타냅니다. 예를 들어, record1의 경우 값은 "1"이고 record2의 값은 "1,3"이고 record3의 경우 값은 "1,2"입니다. 이제는 STORY_LENGTH
에 따라 레코드를 주문하려고하는데 다음과 같은 레코드가 주문됩니다. record1 > record3 > record2
. STORY_LENGTH
데이터 유형이 문자열이고 그 값을 order by ASC
이 문자열로 간주하는 것이 분명합니다. 그러나 여기에 문제가 있습니다. 예를 들어 record4="10"
과 record5="2"
을 주문하려고하면 분명히 원하지 않는 record4 > record5
처럼 보입니다. 2 > 10
및 필드의 여러 값 때문에 서식이 지정된 문자열을 사용하고 있기 때문에. 아무도, 당신이 나를 도울 수 있습니까? 나는 고칠 좋은 생각이 필요해. 감사합니다.order by 절에서 문자열 정렬을 처리하는 방법은 무엇입니까?
답변
설명하는대로 다중 값 필드는 데이터 모델이 손상되었음을 의미하며 normalized이어야합니다.
이 작업이 완료되면 쿼리가 훨씬 간단 해집니다.
필드에는 동일한 유형의 여러 값이 포함됩니다. 예를 들어 곡의 길이는 두 가지가 될 것입니다 : 10,15 또는 10과 같은 싱글. 현재 db 디자인은 변경 될 수없는 상황입니다. –
@Masud Rahman - 이것은 불행합니다. LIKE 연산자를 사용하고 DB가 아닌 응용 프로그램에서 문자열 조작 및 필터링을 수행하여 솔루션을 살펴볼 수 있습니다. 덕분에 – Oded
VARCHAR 필드에 저장된 값을 쉼표로 구분하여 두 번째 또는 첫 번째 숫자로 항목을 정렬하고 싶습니다. 구현은 같을 것이다 MySQL은, 예를 들어, 사용되는 데이터베이스에 따라 달라집니다 :
SELECT * FROM stories
ORDER BY CAST(COALESCE(SUBSTRING_INDEX(story_length, ',', -1), '0') AS INTEGER)
그러나 전체 테이블 스캔을 필요로 정렬 인덱스 대신에 사용하는 같은 성능 향상을 위해 정렬 등의 사용 일반적으로 좋지 않다 아니다 들.
편집 : 편집 후 첫 번째 값을 정렬하고 쉼표 뒤에 값을 무시하려는 것처럼 보입니다. 위의 몇 가지 코멘트에 따르면 데이터베이스 디자인의 변경 사항은 정렬을 위해 다음 코드를 사용하는 옵션이 아닙니다.
SELECT * FROM stories
ORDER BY CAST(COALESCE(NULLIF(SUBSTRING_INDEX(story_length, ',', 1), ''), '0') AS INTEGER)
. 좋아 보인다. 나는 이것을 시도하고 피드백을 줄 것이다. –
- 1. SQL Order By 문자열 목록?
- 2. select by order by와 tsql string concat가 order by 절에서 함수와 함께 작동하지 않습니까?
- 3. GROUP BY ORDER BY
- 4. ORDER BY
- 5. SQL ORDER BY 문제
- 6. 범위에서 MySQL ORDER BY 최적화
- 7. Order by 속성 from dynamic linq
- 8. ORDER BY 문의 방정식
- 9. JPA2 + Hibernate + Order By
- 10. Order by Linq의 객체에서
- 11. Mysql, complex ORDER BY
- 12. ORDER BY CASE in
- 13. SQL Order By 주문자 :
- 14. ClearQuest order by
- 15. ORDER BY 쿼리 최적화
- 16. sp_MSforeachtable order by
- 17. MAX/ORDER BY char 열
- 18. MySQL GROUP BY 및 ORDER BY 질문
- 19. ORDER BY 내에서 mySQL이 동적 값을 처리하는 방법
- 20. GROUP BY와 ORDER BY 사이의 차이점은 무엇입니까?
- 21. .NET DataReader 및 ORDER BY
- 22. Cassandra BETWEEN & ORDER BY 작업
- 23. Grails Order By Not Working
- 24. SQLite의 DESC 조건부 ORDER BY
- 25. mysql ORDER BY "unixtime"(월)
- 26. ORDER BY 문을 배열로 분할
- 27. HQL의 "like"절에서 와일드 카드 문자를 이스케이프 처리하는 방법은 무엇입니까?
- 28. Access 2010 SQL - Group By/Order By 충돌
- 29. 하위 쿼리 및 정렬? (ORDER BY)
- 30. n Hibernate order by N by SQL Server
디자인을 수정하십시오. 단순한. – gbn