Используя MySQL, я выбираю список песен на испанском языке, которые я хотел бы отсортировать. Вот список имен, возвращаемых запросом:
- ¡Дечиревилья!
- Альгамбра
- 123 пасито
- Африка
- Арроз
- Децир
Отсортированный список должен выглядеть так:
- 123 пасито
- Африка
- Альгамбра
- Арроз
- ¡Дечиревилья!
- Децир
После всех исследований, которые я прочитал, я пришел к выводу, что нет разумного способа добиться этого с помощью 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, É -> E и т. д.). Я считаю, что при игнорировании определенных символов и заменяя другие, я могу добиться сортировки, которую я ищу...
Вопрос 4: Все это имеет смысл? Я на правильном пути?
Заранее спасибо за все ваши советы. Марко