背景:需要將省、市、區三級聯動組裝成固定的json結構返回給前端,省市區分別存在三張表中,通過省查出市,在通過市查出區,然后再for循環組裝數據,請求時間超過30秒
優化方案:查出省后,直接根據省查出市和 市對應的區縣,利用GROUP_CONCAT函數將區縣拼接成json字符串,然后構造數據節點返回給前端。整個請求耗時3秒左右
表結構:
省:

市:

區/縣

sql:
String sql = "SELECT c.cityid value,c.city text,GROUP_CONCAT( '{\"text\":\"',area, '\",\"value\":\"', areaid,'\"}' ) children FROM `opc_area_cities` c JOIN opc_area_areas a ON a.cityid = c.cityid WHERE c.provinceid=? GROUP BY c.cityid ORDER BY c.cityid ASC";
查詢結果:

代碼:
List<Record> provinces = AreaProvinces.dao.getAreaProvincesList(); //省
for (Record p : provinces) {
List<Record> cities = AreaCities.dao.getAreaCities(p.get("value")); //得到市和對應的區,區是json字符串
for (Record record : cities) {
String children =record.get("children");
JSONArray jsonArr = JSONArray.fromObject("["+children+"]"); //將區轉為json后返回
record.set("children",jsonArr);
}
p.set("children", cities);
}
children 打印結果:
"{\"text\":\"延慶縣\",\"value\":\"110229\"},{\"text\":\"密雲縣\",\"value\":\"110228\"}"
