MySQL分組查詢(優化for循環)


         背景:需要將省、市、區三級聯動組裝成固定的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\"}"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM