1. 程式人生 > >關於城市列表按首字母排序、分組及查詢的一個解決方案(mysql端)java

關於城市列表按首字母排序、分組及查詢的一個解決方案(mysql端)java

最近要做一個城市列表,網上找了個城市列表往mysql裡面一匯入,OK!  再把城市id,名稱查出來放到list裡面丟給前端客戶端處理。

後面客戶端找過來了,這樣把資料扔過去他那邊不好處理,要求在後臺根據首字母分組之後再傳過去,然後找了一上午處理方法,總體來說有三種方案:

1.把城市名稱列出來扔給前端,前端再提取城市名稱首字的首字母,再根據首字母分組,但是客戶端處理容易記憶體洩漏,處理著不太方便,因此就出現在上述的分組之後再把資料傳遞過去的要求;

2.在業務邏輯處理時對資料庫查詢出來的結果集進行處理,取出城市名稱的首字母,在通過字元匹配進行分組,但是java中沒有把中文首字的首字母取出的類庫或方法,網上找了有人寫了專門的jar包來處理漢字轉拼音。jar包名字是Pinyin4j。網上也有很多它的用法,自己試了一下,執行時侯報錯,也沒時間來查錯誤再去解決它了,這個pass;ps:本方案以後研究,有比較廣泛的應用前景。

3.在資料庫端,mysql裡面通過把新增資料庫表字段來標識其城市名稱首字首字母。剛好我拉取的城市表中有很多保留欄位,就隨便取了一個作為標識欄位,然後通過update給標識欄位賦值,之後就可以在查詢出的結果集中通過標識欄位的取值來進行分組了。

mysql端標識城市名稱首字首字母的sql語句為:

UPDATE zs_city SET zs_city.description =ELT(INTERVAL(CONV(HEX(LEFT(zs_city.`name`,1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC
,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA ,0xCEF4,0xD1B9,0xD4D1),
'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z')

其中zs_city為表名,zs_city.description 為標識欄位,等號後面借鑑的網上的mysql提取漢字首字首字母的方法。