城市级联五级联动后端php前端javascript前后端(快速查出)

博客介绍了如何优化城市级联五级联动查询,通过将数据库信息存储到文件并使用PHP的file_get_contents函数快速读取,显著提高了查询效率。此方法将数据库查询转换为文件操作,实现了前端JavaScript与后端PHP的高效配合。
 <p>
							<label >所属地区:</label>
							<select name="province_id" id="province_id">
		                    <option>请选择</option>
		                    <volist name="province_list" id="province">
		                        <option value="{$province.province_id}">{$province.province_name}</option>
		                    </volist>
		                	</select>
		                <select name="city_id" id="city_id">
		                    <option>请选择</option> 
		                    <option value="" selected="selected"></option>
		                   
		                </select>
		                <select name="district_id" id="district_id">
		                    <option value="">请选择</option>
		                        <option value="" selected="selected">
		                        </option>
		                </select>

		                <select name="town_id" id="town_id">
		                    <option value="">请选择</option>
		                        <option value="" selected="selected">
		                        </option>
		                </select>

		                <select name="village_id" id="village_id">
		                    <option value="">请选择</option>
		                        <option value="" selected="selected">
		                        </option>
		                </select>

						</p>


<script>
        $("#province_id").change(function() {
        	console.log('ok');
            var province_id = $(this).val();
            console.log(province_id)
            $.ajax({
                url: '__APP__/Snnews/get_citys',
                Type: "POST",
                data: "province_id=" + province_id,
                dataType: "json",
                success: function(data) {
                   // console.log(data)
                    var city = data.city.info;
                    console.log(city);
                    var option = $("<option></option>");
                    $(option).val("0");
                    $(option).html("请选择");
                    // var option1 = $("<option></option>");
                    // $(option1).val("0");
                    // $(option1).html("请选择");
                    $("#city_id").html(option);
                    // $("#district_id").html(option1);
                    for (var i in city) {
                        var option = $("<option></option>");
                        $(option).val(city[i]['city_id']);
                        $(option).html(city[i]['city_name']);  
                        $("#city_id").append(option);
                    }
                },
                error: function(data) {
                    console.log(data);
                }

            });
        });
        </script>
        <script>
        $("#city_id").change(function() {
            console.log('cityid')
            var city_id = $(this).val();
            console.log(city_id)
            $.ajax({
                url: '__APP__/Snnews/get_district',
                Type: "POST",
                data: "city_id=" + city_id,
                dataType: "json",
                success: function(data) {
                    var district = data.district.info;
                    console.log(district);
                    var option = $("<option></option>");
                    $(option).val("0");
                    $(option).html("请选择县");
                    $("#district_id").html(option);
                    for (var i in district) {
                        var option = $("<option></option>");
                        console.log(district[i]['county_id']);
                         console.log(district[i]['county_name']);
                        $(option).val(district[i]['county_id']);
                        $(option).html(district[i]['county_name']);
                        $("#district_id").append(option);
                    }
                },
                error: function(data) {
                    console.log('error');
                }
            });
        });
</script>

<script>
        $("#district_id").change(function() {
            console.log('district_id')
            var district_id = $(this).val();
            console.log(district_id)
            $.ajax({
                url: '__APP__/Snnews/get_town',
                Type: "POST",
                data: "county_id=" + district_id,
                dataType: "json",
                success: function(data) {
                	console.log('town')
                    var town = data.town.info;
                    console.log(town);
                    var option = $("<option></option>");
                    $(option).val("0");
                    $(option).html("请选择乡镇");
                    $("#town_id").html(option);
                    for (var i in town) {
                        var option = $("<option></option>");
                        console.log(town[i]['town_id']);
                         console.log(town[i]['town_name']);
                        $(option).val(town[i]['town_id']);
                        $(option).html(town[i]['town_name']);
                        $("#town_id").append(option);
                    }
                },
                error: function(data) {
                    console.log('error');
                }
            });
        });
</script>

<script>
        $("#town_id").change(function() {
            console.log('town_id')
            var town_id = $(this).val();
            console.log(town_id)
            $.ajax({
                url: '__APP__/Snnews/get_village',
                Type: "POST",
                data: "town_id=" + town_id,
                dataType: "json",
                success: function(data) {
                    console.log(data)
                	//console.log('village')
                    var village = data.village.info;
                   // console.log(village);
                    var option = $("<option></option>");
                    $(option).val("0");
                    $(option).html("请选择村");
                    $("#village_id").html(option);
                    for (var i in village) {
                        var option = $("<option></option>");
                        console.log(village[i]['village_id']);
                         console.log(village[i]['village_name']);
                        $(option).val(village[i]['village_id']);
                        $(option).html(village[i]['village_name']);
                        $("#village_id").append(option);
                    }
                },
                error: function(data) {
                    console.log('error');
                }
            });
        });
</script>
  //获取省并缓存
    public function get_provices(){
        if(S('listprovince')){
               $this->assign('province_list',S('listprovince'));
            }else{
                $listObj = M('sn_jilian');
                $listprovince = $listObj->query('SELECT province_name,province_id from mx_sn_jilian GROUP BY province_name,province_id;');
                S('listprovince',$listprovince);
               $this->assign('province_list',S('listprovince'));
             }
    }

           //获取地级市
    public function get_citys(){
       // $listObj = M('sn_jilian');
        $province_id = I('province_id');
        $key = 'city_id';
        $list = $this->seltxt($key,$province_id);
        // $list = $listObj->query("SELECT city_name,city_id  from mx_sn_jilian WHERE province_id = $province_id GROUP BY city_name,city_id;");
            
        $data=array('status'=>0,'city'=>$list);
        header("Content-type: application/json");
        exit(json_encode($data));
    }

            //获取地级县
    public function get_district(){
        //$listObj = M('sn_jilian');
        $city_id = I('city_id');
        $key = 'county_id';
        $list = $this->seltxt($key,$city_id);
        // $district = $listObj->query("SELECT county_name,county_id from mx_sn_jilian WHERE city_id  = $city_id GROUP BY county_name,county_id;");
            
        $data=array('status'=>0,'district'=>$list);
        header("Content-type: application/json");
        exit(json_encode($data));
    }


                 //获取乡镇
    public function get_town(){
       // $listObj = M('sn_jilian');
        $county_id = I('county_id');
        $key = 'town_id';
       // $town = $listObj->query("SELECT town_name,town_id from mx_sn_jilian WHERE county_id  = $county_id GROUP BY town_name,town_id;");
        $list = $this->seltxt($key,$county_id);     
        $data=array('status'=>0,'town'=>$list);
        header("Content-type: application/json");
        exit(json_encode($data));
    }



          //获取村
    public function get_village(){
       // $listObj = M('sn_jilian');
        $town_id = I('town_id');
        $key = 'village_id';
        //$village = $listObj->query("SELECT village_name,village_id from mx_sn_jilian WHERE town_id  = $town_id GROUP BY village_name,village_id;");
        $list = $this->seltxt($key,$town_id);    
        $data=array('status'=>0,'village'=>$list);
        header("Content-type: application/json");
        exit(json_encode($data));
    }




    //传入标识 查相应的txt
    public function seltxt($key,$province_id)
    {
            if($key =='village_id'){
            //通过town_id获取对应的文件
                $txt = $this->gettxt($province_id);
                //获取村的信息
                for($i=0;$i<count($txt);$i++){

                    $list =  file_get_contents(COMMON_PATH.$txt[$i]);
                    $info = unserialize($list);
                    $res = $this->getData($province_id,$info);
                    if($res){
                        break;
                    }
                }

                 $info1['info'] = $res;
        }else{
            $list =  file_get_contents(COMMON_PATH.$key.'.txt');
            $info = unserialize($list);
            $info1['info'] = $this->getData($province_id,$info);
        }  

        $info1['name'] = $name;
        return $info1;
    }

    //根据传入的上级父id  $value获取下级的地方
    public function getData($value,$data)
    {
        if($value==''){
             return $data;
        }else{
            if($data[$value]){

             return $data[$value];
            }else{
                return false;
            }
        }
       
    }

    //通过town_id的值获取对应的文件
    public function gettxt($value)
    {
       if($value<0){
        return false;
       }
       $txt = [];
       if((110101001000 <= $value) && (130902005000 >= $value)){
            $txt[]='village_id0.txt';
       }

      if((130902005000 <= $value) && (150521101000 >= $value)){
                $txt[]='village_id1.txt';
           }

      if((150521101000 <= $value) && (231224211000 >= $value)){
                $txt[]='village_id2.txt';
           }

      if((231224211000 <= $value) && (330782105000 >= $value)){
                $txt[]='village_id3.txt';
           }

      if((330782105000 <= $value) && (36013107000 >= $value)){
                $txt[]='village_id4.txt';
           }

      if((36013107000 <= $value) && (370784121000 >= $value)){
                $txt[]='village_id5.txt';
           }

      if((370784121000 <= $value) && (410184108000 >= $value)){
                $txt[]='village_id6.txt';
           }

      if((410184108000 <= $value) && (420106013000 >= $value)){
                $txt[]='village_id7.txt';
           }

      if((420106013000 <= $value) && (430681208000 >= $value)){
                $txt[]='village_id8.txt';
           }

      if((430681208000 <= $value) && (445224111000 >= $value)){
                $txt[]='village_id9.txt';
           }

      if((445224111000 <= $value) && (510923101000 >= $value)){
                $txt[]='village_id10.txt';
           }

      if((510923101000 <= $value) && (522324106000 >= $value)){
                $txt[]='village_id11.txt';
           }

      if((522324106000 <= $value) && (610831106000 >= $value)){
                $txt[]='village_id12.txt';
           }
      if((610831106000 <= $value) && (659004502000 >= $value)){
                $txt[]='village_id13.txt';
           }


    return $txt;



    }

这是一个 查询五级城市及联的需求 

注释的代码为直接查询数据库

现在是同事优化的 

思路为:把数据表的信息全部写入到文件里

再根据参数进行file_get_contents

 

读取后的数据为数组类型

总之是飞快的~

 

把数据库写入文件

       file_put_contents(COMMON_PATH.'etxtid.txt',time());
            for($i=0;$i<15;$i++){
                  $info1 = M('sn_jilian')->field('town_id,village_id,village_name')->group('town_id,village_id,village_name')->limit($i * 50000,50000)->select();
        // $info1 =D('Snjilian')->getlist($name,$value);

            $info1 = $this->convert_arr_key($info1,'town_id');
                $info1 = serialize($info1);

             file_put_contents(COMMON_PATH.'village_id'.$i.'.txt', $info1);
             unset($info1);


            }

    function convert_arr_key($arr, $key_name)
{
    $result = array();

    foreach($arr as $key => $val){
       //如果这个数组的key值在$rsult中存在,则添加进去,否则申明一个新的
     
       			$result[$val[$key_name]][]=$val;
      
    }
    return $result;
}
//城市及联sql表 百度网盘地址
链接:https://pan.baidu.com/s/1EQo1fDYExPNyGWN6VPXvMQ 密码:2g9a

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值