MySQL을 사용하여, 나는 정렬하고자하는 스페인어로 노래 목록을 선택합니다. 다음은 쿼리에서 반환 한 이름 목록입니다.mysql 또는 php에서 utf 문자를 사용하여 정렬 하시겠습니까? 최상의 솔루션
- ¡ Decirevilla!
- 알람 브라
- 123 pasitos
- 아프리카
- 아 로즈
- Decir
정렬 된 목록은 다음과 같아야합니다
- 123 pasitos
- 아프리카
- 알함브라
- Arroz
- ¡ Decirevilla!
- Decir 내가 읽은 모든 연구 후
, 난이 사용하는 MySQL의를 달성하기 위해 합리적인 방법이 없다는 결론을 내렸다했습니다. 나는 콜레 션, 문자 세트 등을 시도했다. 그러나 원하는 결과에 따라 정렬 할 수있는 방법이 없다. Á도 내가 원하는 방식으로 정렬되어 있지 않습니다 ...
질문 1 : 이것은 합리적인 결론입니까?
나는 이것을 달성하는 유일한 방법은 PHP의 배열에 결과를 전달한 다음 사용자 정의 함수를 사용하여 배열을 정렬하는 것입니다 ...이 모든 함수는 usort를 사용하여 (값으로 정렬해야하고 ' 핵심 연합 유지에 관심 있음). 다음과 유사한 내용 :
function normalize($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$tracks = array();
while ($row = $result->fetch_assoc()) {
$tracks[] = $row;
}
usort($tracks, 'normalize');
질문 2 : 맞춤 정렬을 수행하는 가장 좋은 방법입니까?
질문 3 : 여기
내가 벽을 치는거야 어디 내가 어떻게 내 요구에 따라 이름을 정렬하는 정규화 함수를 만드는 방법 아무 생각이 없습니다. 어떻게하면 특정 문자 (¡,?, ',!, ¿)를 무시할 수 있으며 다른 문자를 자연어로 대체 할 수 있습니까? (A -> A, E -> E 등) 나는 문자를 대체하고 다른 사람을 대체, 나는 정렬을 달성 할 수 있습니다. 나는 ...에 대한 것입니다.
질문 4 :이 모든 것이 의미가 있습니까? 나는 올바른 길을 가고 있는가?
미리 감사드립니다. Marco
공유 호스트에있는 경우 MySQL에 자체 정렬을 추가 할 수 있습니까? – Marco
@Marco : 호스팅 제공 업체에 따라 다르지만 아마도 "아마 그렇지 않을 것"쪽으로 기울어 질 것입니다. 그렇게 할 수 없다면'sortable_title' 방식으로 작업을 거의 완료 할 수 있습니다. –
방금 두 가지 방법 모두 프로그래밍을 마쳤으며 sortable_title을 사용하는 방법은 훨씬 빠릅니다. 타이머와 평균 결과를 mysql 솔루션에 추가했습니다 : 0.009 초 ... PHP 솔루션 : 0.12 초. 이상한 것은 ob_start() .. 메서드를 사용하여 목록을 캐싱했기 때문에 캐시가 눈에 띄게 느리다는 것입니다 ...이 특별한 경우에는 캐시 된 파일을 여는 것이 더 느려서 쿼리를 실행하는 것 같습니다. ..PHP에서 캐싱이 항상 필요한 것은 아닌지 궁금합니다 ... – Marco