使用MySQL,我選擇西班牙語的歌曲列表,我想排序。以下是查詢返回的名稱列表:在mysql或php中使用utf字符排序?最好的解決方案
- Decirevilla!
- 阿罕布拉
- 123 pasitos
- 非洲
- Arroz
- Decir
排序列表應該是這樣的:
- 123 pasitos
- 非洲
- 阿罕布拉
- 阿羅茲
- ¡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,É - > E等)替換其他字符。我相信通過忽略某些字符和替換別人,我可以實現排序我是loojing ...
問題4:這一切都有意義嗎?我在正確的道路上嗎?
在此先感謝您的建議。 Marco
如果我在共享主機上,我可以將自己的排序規則添加到MySQL嗎? – Marco 2011-03-04 23:05:46
@Marco:這取決於託管服務提供商,但我可能傾向於「可能不是」。如果你不能,那麼'sortable_title'方法也能完成工作。 – 2011-03-05 04:27:26
我剛剛完成了兩種編程方法的編程,而sortable_title編寫的方法更快,速度更快。我已經添加了一個計時器和mysql解決方案的平均結果:0.009秒... php解決方案:0.12秒。奇怪的是我已經緩存了列表(使用ob_start()..方法),並且緩存明顯更慢......我想,在這種特定情況下,打開緩存文件比執行查詢要慢。 ..讓你想知道,在PHP緩存並不總是必要的... – Marco 2011-03-05 17:39:50