<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